我在这个查询中遇到了问题
SELECT ID, MYDATE
FROM MY_DATABASE
WHERE (CASE
WHEN TO_CHAR (SYSDATE, 'D') IN ('3',
'4',
'5',
'6',
'7')
THEN
MYDATE > (SYSDATE - NUMTODSINTERVAL ('1', 'DAY'))
AND TO_CHAR (MYDATE, 'YYYY-MM-DD') !=
TO_CHAR (MYDATE, 'YYYY-MM-DD'))
WHEN TO_CHAR(SYSDATE,'D') IN ('2') THEN MYDATE > (SYSDATE -NUMTODSINTERVAL('2','DAY')) AND TO_CHAR(MYDATE, 'YYYY-MM-DD') != TO_CHAR (MYDATE, 'YYYY-MM-DD'))
ELSE NULL
END)=1
Oracle表示在“MYDATE(HERE)>(SYSDATE)”之间缺少一个特定的单词
我还尝试在'THEN'之后创建子查询
我要看身份证。如果今天是“星期一”。星期一的数字是“2”。
给我看前两天的id不算今天的id
如果星期二到星期六的数字是3到7,请告诉我过去1天的id,不包括今天的id
2条答案
按热度按时间cld4siwp1#
语法无效。也许你的意思是这样的?
我不知道你说的状况是什么意思
因为它从来都不是真的;你比较相同的值,它们永远不会 * 不同 *。
**[编辑]**您评论说您想 * 跳过 * 今天的行。
在这种情况下,一个简单的选择是使用
但是请注意,
mydate
列上的索引(如果有的话)不会被使用,除非您创建了一个基于函数的索引。在这种情况下,使用稍微复杂一点的选项。举例来说:
现在是
跳过今天的
mydate
的条件:z3yyvxxp2#
如果今天是“星期一”[.]显示过去两天的id,不计算今天的id。
如果星期二到星期六[.]显示过去1天的id,不计算今天的id
TO_CHAR(date_value, 'D')
在世界各地的不同地区(即在美国,星期日是一周的第一天;在欧洲,星期一是一周的第一天;在中东,星期六是一周的第一天;而在孟加拉国,星期五是一周的第一天)。这使得在国际上使用TO_CHAR(date_value, 'D')
变得困难。相反,您可以使用TRUNC(SYSDATE) - TRUNC(SYSDATE, 'IW')
将这一天与ISO周的开始(始终是星期一午夜)进行比较。你的代码应该是: