请帮助我, 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;
此查询不起作用,请帮助...
答案 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''')
答案 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;