我编写了一个SQL语句,它根据sysdate获取当前周。例如:如果日期是2011年3月12日(星期六),那么o / p应该是
03/06 / 2011-03 /二千零十一分之十二
但不知何故,当我运行下面的SQL查询时,我得到一个o / p:
03/06 / 2011-03 /二千零十一分之十三
有人可以帮我弄清楚查询有什么问题吗?感谢
SELECT CASE
WHEN TO_CHAR(SYSDATE,'DAY') = 'SATURDAY' THEN
TO_CHAR(next_day(SYSDATE-7,'SUNDAY'),'mm/dd/yyyy') || '-' ||to_char(sysdate,'mm/dd/yyyy')
WHEN TO_CHAR(SYSDATE,'DAY') = 'SUNDAY' THEN
TO_CHAR(SYSDATE,'mm/dd/yyyy') || '-' ||to_char(next_day(sysdate,'SATURDAY'),'mm/dd/yyyy')
ELSE
TO_CHAR(next_day(SYSDATE-7,'SUNDAY'),'mm/dd/yyyy') || '-' ||to_char(next_day(sysdate,'SUNDAY'),'mm/dd/yyyy')
END weeks
FROM DUAL
答案 0 :(得分:1)
'DAY'格式正确填充,以便所有结果都具有相同的长度。 (我不知道Oracle为什么这样做,对我来说似乎很愚蠢。)你想要找'SATURDAY '
和'SUNDAY '
,或者修剪结果,或者使用'FMDAY'格式。 / p>
答案 1 :(得分:1)
您只需在查询中进行一项更改..
SELECT CASE
WHEN TO_CHAR(SYSDATE,'DAY') = 'SATURDAY' THEN
TO_CHAR(next_day(SYSDATE-7,'SUNDAY'),'mm/dd/yyyy') || '-' ||to_char(sysdate,'mm/dd/yyyy')
WHEN TO_CHAR(SYSDATE,'DAY') = 'SUNDAY' THEN
TO_CHAR(SYSDATE,'mm/dd/yyyy') || '-' ||to_char(next_day(sysdate,'SATURDAY'),'mm/dd/yyyy')
ELSE
TO_CHAR(next_day(SYSDATE-7,'SUNDAY'),'mm/dd/yyyy') || '-' ||
TO_CHAR(NEXT_DAY(SYSDATE, '星期日')
, 'MM / DD / YYYY') 结束几周 来自双重
在你的这个查询中,其他部分是你错误地检查星期日。
你希望在本周末找到星期六。
所以只需将星期日更改为星期六然后您将得到您想要的答案(结果) :)
答案 2 :(得分:0)