在 Oracle 中获取前一天的日期

问题描述 投票:0回答:2

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

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

感谢您的帮助

oracle date truncate
2个回答
2
投票

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

1
投票

假设您的专栏是

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;
© www.soinside.com 2019 - 2024. All rights reserved.