请帮帮我,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;
此查询无效,请帮助...
默认情况下,Oracle 将日期名称填充到会话日期语言中最长的日期(因此英文为 9)。您可以使用FM
modifer覆盖它。
您Day
还需要匹配大小写,并使用您显示的值(例如'Sunday')而不是DAY
('SUNDAY'):
TO_CHAR(SYSDATE,'FMDay')
或者如果这些值实际上是大写的(你已经显示了两个!):
TO_CHAR(SYSDATE,'FMDAY')
但是您也不应该假设任何调用它的人在他们的会话中使用英语,请指定您希望英语日期名称以确保它与您的表中的内容匹配:
TO_CHAR(SYSDATE,'FMDAY','NLS_DATE_LANGUAGE=''ENGLISH''')
格式模型在文档中进行了描述。
您的 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;