[英]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.