我有一个使用日期的表,需要返回特定日期之间的行。
列名为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_konfi
在2021-01-01T00:00:00
和2021-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'