gpt4 book ai didi

database - Oracle 10g 周数

转载 作者:搜寻专家 更新时间:2023-10-30 21:45:50 27 4
gpt4 key购买 nike

以下查询返回周号。 53,我认为 02-Jan-2017 是 2017 年第一周的开始。

SELECT TRUNC(CL_DT, 'IW') AS WK_STARTDATE,
TRUNC(CL_DT, 'IW') + 6 AS WK_ENDDATE,
TO_CHAR(TO_DATE('02-JAN-17', 'DD-MON-YYYY'), 'IW') AS WK_WEEKNO,
CL_DT,
TO_DATE(SYSDATE, 'DD-MON-YY')
FROM PM_CALENDAR
WHERE CL_DT = TO_DATE('02-JAN-17', 'DD-MON-YY')

请指教我做错了什么。

最佳答案

正确,2017-01-02 在 ISO 第 1 周。但是 0017-01-02 在 ISO 第 53 周:

TO_DATE('02-JAN-17', 'DD-MON-YYYY')

如果 Oracle 发出格式错误会更好,但是数字 17 当然等于 0017 :-)

在将字符串转换为日期时,您永远不应该依赖语言设置('JAN' 当然不是您可以设置的每种语言的有效月份)。您可以为此在 TO_CHAR 中指定一个参数。 TO_DATE(SYSDATE, 'DD-MON-YY') 太可怕了。在这里,您甚至可以根据系统/ session 中的默认格式将 SYSDATE 隐式转换为字符串,然后您将其视为理所当然的 'DD-MON-YY' 并且您将其转换回来。

最好改用 ISO 日期文字(即根本不使用字符串和转换):

date'2017-01-02'

这是更正后的查询:

SELECT TRUNC(CL_DT, 'IW') AS WK_STARTDATE,
TRUNC(CL_DT, 'IW') + 6 AS WK_ENDDATE,
TO_CHAR(DATE '2017-01-02', 'IW') AS WK_WEEKNO,
CL_DT
FROM PM_CALENDAR
WHERE CL_DT = DATE '2017-01-02';

关于database - Oracle 10g 周数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41426269/

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