我需要使用truncate而不是如何在Oracle中使用截断日期前一天。他正在使用以下行,但为我当前的执行日带来了一些记录,不应该。 Neceisto只在前一天;调查发现截断日期在Oracle中有日期而不是如何使用它。
and fnxs.FECHA_INGRESO BETWEEN (TO_CHAR (SYSDATE-1, 'DD-MON-YY')) AND (TO_CHAR (SYSDATE, 'DD-MON-YY'));
感谢您的帮助
答案 0 :(得分:1)
假设您的列属于DATE
SELECT *
FROM TABLE_NAME
WHERE FECHA_INGRESO BETWEEN TRUNC( SYSDATE ) - 1
AND TRUNC( SYSDATE );
如果是字符串,则:
SELECT *
FROM TABLE_NAME
WHERE TO_DATE( FECHA_INGRESO, 'DD-MON-YY' )
BETWEEN TRUNC( SYSDATE ) - 1
AND TRUNC( SYSDATE );
答案 1 :(得分:1)
在Oracle中使用带有日期的BETWEEN
通常是一个坏主意。我一直都看到它,大多数时候人们都弄错了(就像上面接受的答案一样)。即使他们完全理解这两个日期都包含在内,他们仍然会因为忘记时间戳而出现逻辑错误。
OP正在询问昨天的日期。以下sql显示今天属于" BETWEEN TRUNC(SYSDATE) - 1和TRUNC(SYSDATE)"
with adate as (
select trunc(sysdate) today from dual
) select today from adate where today between trunc(sysdate) -1
and trunc(sysdate);
16-Apr-15 00:00:00 [返回今天的记录]
当您更清楚地了解终点时,我发现使用日期更容易正确:
SELECT * from your_table
WHERE fnxs.FECHA_INGRESO >= TRUMC(SYSDATE) - 1
AND fnxs.FECHA_INGRESO < TRUNC(SYSDATE);
仔细观察,OP的类似日期的列可能是一个VARCHAR2(可能仍然是在他给出的比较中隐式投射的日期)。如果它是VARCHAR,则需要首先转换它(使用适当的格式字符串):
SELECT * FROM your_table
WHERE TO_DATE(fnxs.FECHA_INGRESO, 'DD-MON-YY') >= TRUMC(SYSDATE) - 1
AND TO_DATE(fnxs.FECHA_INGRESO, 'DD-MON-YY') < TRUNC(SYSDATE);