Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
获取Oracle中前一天的日期_Oracle_Date_Truncate - Fatal编程技术网

获取Oracle中前一天的日期

获取Oracle中前一天的日期,oracle,date,truncate,Oracle,Date,Truncate,我需要在Oracle中使用截断,而不是如何使用截断,来显示日期的前一天。他用的是下面这行,但给我带了一些当天行刑的记录,不应该。只需前一天;调查发现,在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

我需要在Oracle中使用截断,而不是如何使用截断,来显示日期的前一天。他用的是下面这行,但给我带了一些当天行刑的记录,不应该。只需前一天;调查发现,在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中,在日期之间使用
,通常是个坏主意。我一直在看,而且大多数时候人们都弄错了(就像上面被接受的答案一样)。即使他们完全理解这两个日期都包含在内,他们仍然会犯逻辑错误,因为他们忘记了时间戳

OP询问昨天的日期。下面的sql显示今天属于“介于TRUNC(SYSDATE)-1和TRUNC(SYSDATE)”之间

4月16日至15日00:00:00 [返回今天的记录]

我发现,当你对终点更明确时,更容易正确地确定日期:

SELECT * from your_table
WHERE fnxs.FECHA_INGRESO >= TRUMC(SYSDATE) - 1
AND fnxs.FECHA_INGRESO < TRUNC(SYSDATE);
从您的_表中选择*
其中fnxs.FECHA_INGRESO>=TRUMC(SYSDATE)-1
和fnxs.FECHA_INGRESO
仔细观察,OP的类似日期的列可能是一个VARCHAR2(也可能是在他给出的比较中隐式转换的日期)。如果它是VARCHAR,则需要首先转换(使用适当的格式字符串):

从您的_表中选择*
截止日期(fnxs.FECHA_INGRESO,'DD-MON-YY')>=TRUMC(SYSDATE)-1
截至日期(fnxs.FECHA_INGRESO,'DD-MON-YY')
您真的想要昨天的记录吗?您接受了可以返回今天记录的答案。请勿将日期存储在
varchar
列中。你应该尽快解决这个问题。“在日期之间使用通常是个坏主意”——在实际日期中则不然。不幸的是,Oracle的
date
实际上是一个
timestamp
(或
datetime
)它没有一个“真正的”日期(即一个日期,只有一个日期,没有时间部分)。好吧,我最好限定一下我的陈述。@a_horse_没有名字:即使没有时间戳,另一个答案也是错误的。我想我应该说,很多人不明白
BETWEEN
包括端点。您的解决方案包括今天的记录
SELECT * from your_table
WHERE fnxs.FECHA_INGRESO >= TRUMC(SYSDATE) - 1
AND fnxs.FECHA_INGRESO < TRUNC(SYSDATE);
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);