Sql 如何根据oracle数据库中的日期检索记录
我有一张有日期栏的表。我需要根据我的记录从中取出记录 给定的日期 当前我使用查询时:Sql 如何根据oracle数据库中的日期检索记录,sql,oracle,Sql,Oracle,我有一张有日期栏的表。我需要根据我的记录从中取出记录 给定的日期 当前我使用查询时: select * from workingemployee_data where created_date like '20-Jan-2012' 我收到的记录创建日期为2012年1月20日 但是我想得到那些在10天前创建的记录 日期(即)2012年1月20日 请就此向我提出建议。这提供了从今天到10天前的所有记录: SELECT * FROM workingemployee WHERE created_dat
select * from workingemployee_data where created_date like '20-Jan-2012'
我收到的记录创建日期为2012年1月20日
但是我想得到那些在10天前创建的记录
日期(即)2012年1月20日
请就此向我提出建议。这提供了从今天到10天前的所有记录:
SELECT *
FROM workingemployee
WHERE created_date BETWEEN sysdate - INTERVAL '10' DAY
AND sysdate
SELECT *
FROM workingemployee
WHERE created_date = sysdate - INTERVAL '10' DAY
这将给出10天前输入的所有记录:
SELECT *
FROM workingemployee
WHERE created_date BETWEEN sysdate - INTERVAL '10' DAY
AND sysdate
SELECT *
FROM workingemployee
WHERE created_date = sysdate - INTERVAL '10' DAY
如果需要,用确切日期替换sysdate
一样使用,而不是=
created_date
的类型为date
,根据NLS_date_格式
依赖隐式转换是不好的做法(这是比较日期和字符串时发生的情况)dd mon yyyyy
不是一种很好的查询格式,因为它根据NLS\u语言进行定义
更好地使用mm
查询月数SELECT *
FROM workingemployee
WHERE trunc(created_date) = to_date('20-01-2013', 'dd-mm-yyyy') - 10
挑选*
来自工作雇员
其中创建日期>系统日期-间隔“10”天 此列的数据类型是什么
created\u date
?like
对于日期没有任何意义不幸的是,此解决方案无法利用created\u date
上可能的索引,因此将使用全表扫描-速度非常慢,特别是如果表很大,可以通过使用基于函数的索引来解决这一问题,或者使用创建日期>=截止日期('20-01-2013 000000','dd-mm-yyyy-hh24miss')-10和创建日期>=截止日期('20-01-2013 235959','dd-mm-yyyy-hh24miss')-10来解决这一问题。但是,如果我尝试用自定义日期(如created_date='25-DEC-2011'-INTERVAL'10'DAY)替换sysdate,则表示日期/时间间隔的数据类型无效。您的created_date
似乎不是真正的日期类型,而是VARCHAR
。这真是个糟糕的主意,尤其是在速度和索引方面-请将其转换为realDATE
。但是,您可以使用此表达式作为解决方法:to_date('2012年12月25日,'dd mon yyyy')
created_date在我的表格中是date类型,好的。仍然可以使用类似于to_date('25-DEC-2012','dd-mon-yyyy')
的方法将输入字符串转换为实际日期类型很高兴它对您有所帮助!如果您在创建日期上有索引,它应该运行得非常快