oracle where子句不适用于sysdate

时间:2018-07-08 07:49:06

标签: oracle where sysdate

请帮助我, DAY_ID是包含1-7个数字的数据库字段。 1代表星期一,2代表星期二,依此类推。

DECLARE
V_DAY_ID NUMBER(1) :=0;
BEGIN
SELECT DAY_ID INTO V_DAY_ID FROM DAYS WHERE DAY_NAME = TO_CHAR(SYSDATE,'DAY');
END;

此查询不起作用,请帮助...

2 个答案:

答案 0 :(得分:5)

默认情况下,Oracle使用会话日期语言(最长为9个)填充日期名称。您可以覆盖该with the FM modifer

您还需要匹配大小写,并使用显示的值you need Day(例如“ Sunday”)(而不是DAY(“ SUNDAY”)):

TO_CHAR(SYSDATE,'FMDay')

或者这些值实际上是大写的(您已经显示了两个!):

TO_CHAR(SYSDATE,'FMDAY')

但是,您也不应假定在调用该会话的过程中使用英语的人,请指定您希望英语的日期名称以确保其与表中的内容匹配:

TO_CHAR(SYSDATE,'FMDAY','NLS_DATE_LANGUAGE=''ENGLISH''')

SQL Fiddle demo

格式模型为are described in thee documentation

答案 1 :(得分:1)

您的DAY_NAME不会以大写形式保存,因此在这种情况下,请添加UPPER函数(并使用TRIM值忽略空格)

DECLARE
V_DAY_ID NUMBER(1) :=0;
BEGIN
SELECT DAY_ID INTO V_DAY_ID FROM DAYS WHERE UPPER(DAY_NAME) = TRIM(TO_CHAR(SYSDATE,'DAY'));
END;