gpt4 book ai didi

sql - dd-mm-yyyy 到 yyyy-mm-dd SQL

转载 作者:行者123 更新时间:2023-12-04 19:16:39 24 4
gpt4 key购买 nike

我正在学校做 SQL 作业。 DATE 对我来说有问题。给出了一个查询。

INSERT INTO myTable (t_id, Birthdate) VALUES (1, TO_DATE('01-Jun-2005','dd-mm-yyyy'));
INSERT INTO myTable (t_id, Birthdate) VALUES (2, TO_DATE('04-Apr-2002','dd-mm-yyyy'));
INSERT INTO myTable (t_id, Birthdate) VALUES (3, TO_DATE('21-Mar-2004','dd-mm-yyyy'));
INSERT INTO myTable (t_id, Birthdate) VALUES (4, TO_DATE('05-Dec-2002','dd-mm-yyyy'));
INSERT INTO myTable (t_id, Birthdate) VALUES (5, TO_DATE('13-Sep-2003','dd-mm-yyyy'));

我想获取 YEAR 为 2002 的 t_id。我尝试了以下代码,

SELECT t_id FROM myTable WHERE YEAR(Birthdate) = '2002';

但它给我语法错误。我在互联网上搜索它。它说 YEAR 仅适用于“yyyy-mm-dd”格式。但是,在我的作业问题上有 'dd-mm-yyyy' 格式。我该如何回答我的问题?请帮助我摆脱这个 hell 。

最佳答案

year() 并非在所有 RDBMS 中都受支持(尤其是您似乎正在使用的 Oracle 或 Postgres,不支持它)。改用sql标准函数extract():

extract(year from Birthdate)

如果 Birthdate 是类似 date 的数据类型,则此方法有效。如果它是某种格式的字符串,则需要先将其转换为日期,在 Oracle 中使用 to_date(),例如:

extract(year from to_date(Birthdate, 'yyyy-mm-dd'))

其他 RDBMS 有不同的函数将字符串转换为日期。

最后请注意,在过滤时避免使用函数会更有效,因为这会破坏被过滤列上的索引。你通常想对整个日期进行比较,所以:

Birthdate >= to_date('2002-01-01', 'yyyy-mm-dd') and
Birthdate < to_date('2003-01-01', 'yyyy-mm-dd')

注意:'01-Jun-2005' 的格式描述符将是 'dd-mon-yyyy',而不是 'dd-mm-yyyy '.

关于sql - dd-mm-yyyy 到 yyyy-mm-dd SQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58609342/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com