繁体   English   中英

如何在oracle DB中检查某个日期是否在当前日历月中

[英]How to check whether some date is in the current calendar month or not in oracle DB

我需要打印当前日历月作为注册月份的记录。

我使用sysdate来实现这个功能。 但是,我不确定这是否正确。

我的代码是,

select * from student where sysdate,trunc('mm') = enrolled_month;

我只需要一些方法来使用sysdate函数打印当前月份。

任何形式的帮助将不胜感激。

提前致谢。

我相信你需要EXTRACT功能:

select * 
  from student 
 where enrolled_month = extract(month from sysdate);

这是使用TO_CHAR另一个选项:

SELECT *
FROM student
WHERE TO_CHAR(sysdate, 'Month') = enrolled_month;

但我认为将注册月份名称(可能还有其他组件)与注册日期分开存储并不是一个好主意。 只需存储一次日期,然后使用Oracle的日期函数来处理该数据。

您可以使用

SELECT TO_CHAR(SYSDATE, 'MON') FROM DUAL;

要么

SELECT TO_CHAR(SYSDATE, 'MM') FROM DUAL;

要么

SELECT EXTRACT(MONTH FROM SYSDATE) FROM DUAL;

但是,如果您的学生表包含超过一年的数据,您可能还需要考虑年份。

除了我们同事的所有好答案之外,您可以在本地语言中保存enrolled_month列的值(在列enrolled_month填充期间),并在where子句中匹配to_char函数的nls_date_language参数的贡献:

select enrolled_month as "Month_Hindi"
  from student 
 where to_char(sysdate, 'Month','nls_date_language=Hindi') = enrolled_month;

Month_Hindi
-----------
अगस्त

要么

select enrolled_month as "Month_Tamil" 
  from student 
 where to_char(sysdate, 'Month','nls_date_language=Tamil') = enrolled_month;

Month_Tamil
-----------
ஆகஸ்ட்

考虑到你来自斯里兰卡

我强烈建议你考虑这种方法:

select s.*
from student s
where enrolled_month >= trunc(sysdate, 'mon') and
      enrolled_month < trunc(sysdate, 'mon') + interval '1' month;

为什么这比其他方法更好? 函数调用全部在sysdate ,而不是在表列上。 这意味着Oracle可以利用enrolled_month上的索引 - 这可能是性能的重大改进。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM