好吧我想我上一年而不是前一天,但我需要前一天。
SELECT TO_DATE(TO_CHAR(CURRENT_DATE, 'YYYY-MM-DD'),'YYYY-MM-DD') - 1 FROM Dual
我将它与此格式的日期时间标记进行比较,并希望获得前一天的所有行。
YYYY-MM-DD HH:MM:SS
所以我正在尝试这样的事情
SELECT field,datetime_field
FROM database
WHERE datetime_field > TO_DATE(TO_CHAR(CURRENT_DATE, 'YYYY-MM-DD'),'YYYY-MM-DD') - 1
答案 0 :(得分:27)
sysdate怎么样?
SELECT field,datetime_field
FROM database
WHERE datetime_field > (sysdate-1)
答案 1 :(得分:5)
您可以使用TRUNC
删除日期的时间部分。
select field,datetime_field
from database
where datetime_field >= trunc(sysdate-1,'DD');
该查询将为您提供从昨天开始的所有日期行。注意trunc()
的第二个参数。您可以使用它来截断日期的任何部分。
如果您的datetime_fied包含'2011-05-04 08:23:54'
,则会返回以下日期
trunc(datetime_field, 'HH24') => 2011-05-04 08:00:00
trunc(datetime_field, 'DD') => 2011-05-04 00:00:00
trunc(datetime_field, 'MM') => 2011-05-01 00:00:00
trunc(datetime_field, 'YYYY') => 2011-00-01 00:00:00
答案 2 :(得分:2)
SELECT field,datetime_field
FROM database
WHERE datetime_field > (CURRENT_DATE - 1)
我曾经在Oracle工作过一段时间。但是,我认为这应该有用。
答案 3 :(得分:2)
这个
SELECT field,datetime_field
FROM database
WHERE datetime_field > (sysdate-1)
会奏效。问题是:'datetime_field'的格式是否与sysdate相同? 我的处理方法是:使用'to_char()'函数(仅适用于Oracle)。
样品: 前一天:
select your_column
from your_table
where to_char(sysdate-1, 'dd.mm.yyyy')
或
select extract(day from date_field)||'/'||
extract(month from date_field)||'/'||
extract(year from date_field)||'/'||
as mydate
from dual(or a_table)
where extract(day from date_field) = an_int_number and
extract(month from date_field) = an_int_number and so on..
比较日期:
select your_column
from your_table
where
to_char(a_datetime_column, 'dd.mm.yyyy') > or < or >= or <= to_char(sysdate, 'dd.mm.yyyy')
昨天和前天之间的时间范围:
select your_column
from your_table
where
to_char(a_datetime_column, 'dd.mm.yyyy') > or < or >= or <= to_char(sysdate-1, 'dd.mm.yyyy') and
to_char(a_datetime_column, 'dd.mm.yyyy') > or < or >= or <= to_char(sysdate-2, 'dd.mm.yyyy')
其他时间范围 变体
select your_column
from your_table
where
to_char(a_datetime_column, 'dd.mm.yyyy') is between to_char(sysdate-1, 'dd.mm.yyyy')
and to_char(sysdate-2, 'dd.mm.yyyy')
答案 4 :(得分:0)
我认为你也可以执行这个命令:
从dual选择(sysdate-1)PREVIOUS_DATE;
答案 5 :(得分:0)
简单的解决方案和理解
要回答问题:
SELECT field,datetime_field
FROM database
WHERE TO_CHAR(date_field, 'YYYYMMDD') = TO_CHAR(SYSDATE-1, 'YYYYMMDD');
一些解释
如果您的字段不是日期格式,但要使用日期进行比较,即该字段被视为日期,但为数字格式,例如20190823(YYYYMMDD)
SELECT * FROM YOUR_TABLE WHERE ID_DATE = TO_CHAR(SYSDATE-1, 'YYYYMMDD')
如果您具有日期/时间戳格式的字段并且需要进行比较,只需更改格式
SELECT TO_CHAR(SYSDATE-1, 'YYYY-MM-DD HH24:MI:SS') FROM DUAL
如果要将其恢复为日期格式
SELECT TO_DATE(TO_CHAR(SYSDATE-1, 'YYYY-MM-DD HH24:MI:SS'), 'YYYY-MM-DD HH24:MI:SS') AS NEW_DATE FROM DUAL
结论。
借助此知识,您可以将要比较的文件转换为YYYYMMDD或YYYY-MM-DD或任何年月日格式,然后与相同的sysdate格式进行比较。
答案 6 :(得分:-1)
对于这部分“ TO_DATE(TO_CHAR(CURRENT_DATE,'YYYY-MM-DD'),'YYYY-MM-DD')”有点困惑。 您想对此条款做什么? 当您运行从DUAL获取日期的基本查询时,结果中显示的格式是默认格式。 除此之外,我在您的查询中执行了此操作,并检索了前一天 “选择(CURRENT_DATE-1)from Dual”。让我知道它是否对您有用,如果不能解决,请告诉我有关该问题的信息。谢谢,一切顺利。