mysql date trunc_Oracle SQL:子句其中:date_column = trunc(sysdate)结果与trunc不同(date_column)= trunc(sydate)(...

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 /

...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值