Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何根据oracle数据库中的日期检索记录_Sql_Oracle - Fatal编程技术网

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
    。这真是个糟糕的主意,尤其是在速度和索引方面-请将其转换为real
    DATE
    。但是,您可以使用此表达式作为解决方法:
    to_date('2012年12月25日,'dd mon yyyy')
    created_date在我的表格中是date类型,好的。仍然可以使用类似于
    to_date('25-DEC-2012','dd-mon-yyyy')
    的方法将输入字符串转换为实际日期类型很高兴它对您有所帮助!如果您在
    创建日期
    上有索引,它应该运行得非常快