在 Oracle 中获取前一天的日期

Get date of the previous day in Oracle

我需要使用截断在 Oracle 中将日期紧接在日期之前,但不知道如何。他正在使用以下行,但给我带来了当天执行的一些记录,但不应该。 Neceisto 只在前一天;调查发现在 Oracle 中使用日期截断但未发现如何使用它。

and fnxs.FECHA_INGRESO BETWEEN (TO_CHAR (SYSDATE-1, 'DD-MON-YY')) AND (TO_CHAR (SYSDATE, 'DD-MON-YY'));

感谢您的帮助

假设您的列的类型为 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 );

在 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);

2015 年 4 月 16 日 00:00:00 [returns 今天的记录]

我发现当你对结束点更明确时,日期更容易正确:

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);