在 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);
我需要使用截断在 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);