我需要在 Oracle 中使用截断而不是如何将日期紧接在日期之前。他正在使用以下行,但给我带来了当天执行的一些记录,但不应该。 Neceisto 只在前一天;调查发现在 Oracle 中使用日期截断但不知道如何使用它。
and fnxs.FECHA_INGRESO BETWEEN (TO_CHAR (SYSDATE-1, 'DD-MON-YY')) AND (TO_CHAR (SYSDATE, 'DD-MON-YY'));
感谢您的帮助
在 Oracle 中将
BETWEEN
与日期一起使用通常不是一个好主意。我一直都看到它,而且大多数时候人们都弄错了(就像上面接受的答案一样)。即使他们完全理解这两个日期包括在内,他们仍然会犯逻辑错误,因为他们忘记了时间戳。
OP 要求提供昨天的日期。以下 sql 显示今天属于“BETWEEN TRUNC( SYSDATE ) - 1 AND TRUNC( SYSDATE )”
with adate as (
select trunc(sysdate) today from dual
) select today from adate where today between trunc(sysdate) -1
and trunc(sysdate);
15 年 4 月 16 日 00:00:00 [返回今天的记录]
我发现当你对终点更明确时,更容易正确地使用日期:
SELECT * from your_table
WHERE fnxs.FECHA_INGRESO >= TRUMC(SYSDATE) - 1
AND fnxs.FECHA_INGRESO < TRUNC(SYSDATE);
仔细观察,OP 的类似日期的列 might 是一个 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);
假设您的专栏是
DATE
类型
SELECT *
FROM TABLE_NAME
WHERE FECHA_INGRESO >= TRUNC( SYSDATE ) - 1
AND FECHA_INGRESO < TRUNC( SYSDATE );
如果是字符串则:
SELECT *
FROM TABLE_NAME
WHERE TO_DATE( FECHA_INGRESO, 'DD-MON-YY' ) = TRUNC( SYSDATE ) - 1;