【问题标题】:oracle where clause is not working with sysdateoracle where 子句不适用于 sysdate
【发布时间】:2018-07-08 07:49:06
【问题描述】:

请帮帮我, 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;

此查询无效,请帮助...

【问题讨论】:

  • DAY被填充。你试过LIKE吗?并检查NLS 和表格内容。如果您在不同国家/地区拥有它,则会有不同名称的日子。
  • 是的先生,我也尝试过 LIKE QUERY 但它不起作用
  • 什么是 DAY_ID 和 DAY_NAME 列类型?什么错误?
  • DAY 是一个表名,其中 2 列 (Day_id, Day_name) 像 (1, 'Monday'), (2,'Tuesday), (3,'Wednesday) ----- (7 ,'星期天)
  • 如果有一个答案适合你,请采纳;这既是一种将问题标记为已关闭的方式,也是一种感谢帮助过你的人的方式。 Here 当有人回答你时,你会发现更多关于如何做的事情。

标签: oracle where sysdate


【解决方案1】:

默认情况下,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

【讨论】:

  • 谢谢。它运行良好.. 你能进一步解释一下,b/w DAY 和 FMday 有什么区别
  • @SYEDZEESHANALI - 我添加了一个示例和一些文档链接。但是DAY 给你'SUNDAY ',它是大写和填充的,FMDay 给你'Sunday',它是混合大小写而不是填充的。
【解决方案2】:

您的 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;

【讨论】:

  • 先生,它已经以大写形式保存了。我检查了这个查询,但同样的错误..
  • @SYEDZEESHANALI 在您的 cmets 中不是大写,有什么错误?
  • 从天数中选择 *; DAY_ID DAY_NAME ------ ---------- 1 星期一 2 星期二 3 星期三 4 星期四 5 星期五 6 星期六 7 星期日
  • 它显示 2 个不同的错误.... ORA-01403:未找到数据 ORA-06512:在第 4 行
  • 当我应用这个查询时。它正在工作,我不需要此查询 SELECT DAY_ID INTO V_DAY_ID FROM DAYS WHERE DAY_NAME = 'SUNDAY';
猜你喜欢
  • 2017-12-21
  • 1970-01-01
  • 2021-04-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-08
相关资源
最近更新 更多