如何在oracle中比较不同格式的日期?



我有一个使用日期的表,需要返回特定日期之间的行。

列名为tg_konfi,列格式为DATE, tg_konfi日期为02-FEB-21。

我试过了

SELECT * From table where to_date(tg_konfi,'DD-MON-YY') between to_date('2021-01-01','YYYY-MM-DD') and to_date('2021-10-07','YYYY-MM-DD');

,它不返回任何值。是我遗漏了什么,还是我做错了?

由于tg_confi是日期数据类型列,因此在该列上不使用to_date

使用以下查询:

SELECT * 
From table 
where tg_konfi between to_date('2021-01-01','YYYY-MM-DD') 
and to_date('2021-10-07','YYYY-MM-DD');

日期没有格式-它在数据库内部存储为7个字节(表示世纪,世纪年,月,日,小时,分钟和秒),直到您使用的任何用户界面(即SQL/Plus, SQL Developer, Java等)试图显示它给您,用户,这是将它转换成您认为有意义的日期格式(通常是字符串)(并且转换是由用户界面而不是由数据库完成的)。

如果你的值都是DATE数据类型,那么这意味着你不需要担心任何格式-因为它们在数据库中没有格式。

最简单的方法是使用日期文字:
SELECT *
FROM   table
WHERE  tg_konfi BETWEEN DATE '2021-01-01'
AND DATE '2021-10-07';

或使用TO_DATE显式地从字符串文字转换:

SELECT *
FROM   table
WHERE  tg_konfi BETWEEN TO_DATE( '2021-01-01', 'YYYY-MM-DD' )
AND TO_DATE( '2021-10-07', 'YYYY-MM-DD' );

这将获得tg_konfi2021-01-01T00:00:002021-10-07T00:00:00之间的所有行。

如果你想要的范围包括最多2021-10-07T23:59:59,那么你可以使用:

SELECT *
FROM   table
WHERE  tg_konfi >= DATE '2021-01-01'
AND    tg_konfi <  DATE '2021-10-07' + INTERVAL '1' DAY; -- or DATE '2021-10-08'

相关内容

  • 没有找到相关文章

最新更新