Oracle SQL:子句其中:date_column = trunc(sysdate)结果与trunc不同(date_column)= trunc(sydate)(Oracle SQL: clause Where : date_column=trunc(sysdate) result different to trunc(date_column)=trunc(sydate))
我正在使用Oracle SQL开发人员从数据库中选择数据。 但是当我在WHERE子句中使用以下内容时,我得到了不同的结果:
date_column=trunc(sysdate)结果不同于
trunc(date_column)=trunc(sydate) 。
此外,即使表中有相应的数据, date_column = sysdate也不返回任何行。
I'm using Oracle SQL developer to select data from a database. But I'm getting different results when i'm using the following in the WHERE Clause:
date_column=trunc(sysdate) result different to
trunc(date_column)=trunc(sydate).
Also, the date_column = sysdate is returning no row even if I have corresponding data in the table.
原文:https://stackoverflow.com/questions/48384285
更新时间:2019-09-21 03:58
最满意答案
对。 在Oracle中, date数据类型有点误导,因为它有一个时间组件。 所以:
date_column = trunc(sysdate)
返回date_column正好在午夜传递的行。
trunc(date_column) = trunc(sysdate)
返回今天发生的任何事情。
date_column = sysdate
仅在时间组件匹配时才有效,这种可能性极小。
我经常把逻辑写成:
date_column >= trunc(sysdate) and date_column < trunc(sysdate + 1)
此方法可确保date_column上的索引可用于筛选。
Yup. In Oracle, the date data type is a bit misleading, because it has a time component. So:
date_column = trunc(sysdate)
returns rows where date_column is at exactly midnight just passed.
trunc(date_column) = trunc(sysdate)
returns anything that happens today.
date_column = sysdate
Only works if the time components match, which is highly unlikely.
I would often write the logic as:
date_column >= trunc(sysdate) and date_column < trunc(sysdate + 1)
This method ensures that an index on date_column can be used for the filtering.
2018-01-22
相关问答
尝试: ... date_trunc('day',calldate) ...
对于PostgreSQL date_trunc()函数,您必须始终将precision指定为第一个参数。 细节在这里 。 Try: ... date_trunc('day',calldate) ...
For PostgreSQL date_trunc() function you must always specify precision as the first argument. Details here.
它可能通过对日期或时间戳字段进行算术运算来获得ISO周的开始,这里星期的开始是Monday (1),星期的末尾是Sunday (7) db.dd.aggregate(
[
{
$addFields : {
startOfWeek : 1, // Monday
currentDayOfWeek : {$dayOfWeek : "$date"},
days
...
要截断到四分之一,请参阅在SQL Server中截断日期的最佳方法是什么? SELECT DATEADD(Q, DATEDIFF(Q, 0, convert(datetime,'1-dec-2017')), 0)
加五个月。 SELECT DATEADD(M, 5, DATEADD(Q, DATEDIFF(Q, 0, convert(datetime,'1-dec-2017')), 0))
减去一天 SELECT DATEADD(M, 5, DATEADD(Q, DATEDIFF(Q, 0,
...
经过一些激烈的分析后,我发现我遇到了一个oracle bug - > Bug 18461054:TRUNC WITH DATE BIND分区表给出了错误的结果 所以这个问题可能会发生截断或圆形日期。 当前会话的解决方法是 alter session set "_optimizer_generate_transitive_pred"=false;
还有补丁补丁18461054:TRUNC与分区表上的日期结合给出了错误的结果 希望能帮助别人而不是我:) 最好, 帕特里克 After some int
...
如果您使用日期右侧,则应使用日期左侧 SELECT *
from pemesanan
where date(pemesanan.`date`) = DATE(DATE_ADD(NOW(), INTERVAL 3 DAY))
如果你使用相同的日期pemesanan.date你永远不会得到pemesanan.date = pemesanan.date +3 但如果你想选择3天以上的日期,你可以选择使用 SELECT *
from pemesanan
where d
...
我可能会做类似的事情 WHERE some_date_col BETWEEN trunc(sysdate-1) + interval '17' hour -- 5pm yesterday
AND trunc(sysdate) + interval '7' hour -- 7am today
和 WHERE some_date_col BETWEEN trunc(sysdate) + interval '7' hour -- 7am today
...
来自Oracle参考: https://docs.oracle.com/cd/B19306_01/server.102/b14200/functions201.htm TRUNC( 日期 )函数返回日期,截断日期的时间部分为格式模型fmt指定的单位。 该功能对NLS_ CALENDAR会话参数不敏感。 它按照公历的规则运作。 即使您为日期指定了不同的日期时间数据类型,返回的值始终为数据类型DATE 。 From Oracle reference: https://docs.oracle.com/c
...
使用MomentJS $("#result").text(moment().format("YYYY-MM-DD 00:00:00Z"));
...
对。 在Oracle中, date数据类型有点误导,因为它有一个时间组件。 所以: date_column = trunc(sysdate)
返回date_column正好在午夜传递的行。 trunc(date_column) = trunc(sysdate)
返回今天发生的任何事情。 date_column = sysdate
仅在时间组件匹配时才有效,这种可能性极小。 我经常把逻辑写成: date_column >= trunc(sysdate) and date_column < tr
...
1 Hive运算符和用户定义函数(UDF) 至今 返回时间戳字符串的日期部分(pre-Hive 2.1.0): to_date(“1970-01-01 00:00:00”)=“1970-01-01”。 从Hive 2.1.0开始,返回一个日期对象。 在Hive 2.1.0( HIVE-13248 )之前,返回类型是一个String,因为创建方法时不存在Date类型。 TRUNC 返回截断为格式指定单位的日期(从Hive 1.2.0开始)。 支持的格式:MONTH / MON / MM,YEAR /
...