gpt4 book ai didi

sql - 在 Oracle 中对日期使用 trunc 函数的原因

转载 作者:行者123 更新时间:2023-12-02 01:04:11 25 4
gpt4 key购买 nike

我目前正在 Oracle 数据库项目中工作。我在应用程序代码中观察到日期几乎从不直接使用。相反,它们总是与 trunc 函数(TRUNC(SYSDATE)、TRUNC(event_date) 等)结合使用

谁能解释一下使用 trunc 函数而不是直接使用日期的原因?

最佳答案

Oracle 中的DATE 不仅有日期部分,还有时间部分。这在查询数据时可能会导致令人惊讶的结果,例如查询

with v_data(pk, dt) as (
select 1, to_date('2014-06-25 09:00:00', 'YYYY-MM-DD hh24:mi:ss') from dual union all
select 2, to_date('2014-06-26 09:00:00', 'YYYY-MM-DD hh24:mi:ss') from dual union all
select 3, to_date('2014-06-27 09:00:00', 'YYYY-MM-DD hh24:mi:ss') from dual)
select * from v_data where dt = date '2014-06-25'

不会返回任何行,因为您要与 2014-06-25 午夜进行比较。

通常的解决方法是使用 TRUNC() 去除时间部分:

with v_data(pk, dt) as (
select 1, to_date('2014-06-25 09:00:00', 'YYYY-MM-DD hh24:mi:ss') from dual union all
select 2, to_date('2014-06-26 09:00:00', 'YYYY-MM-DD hh24:mi:ss') from dual union all
select 3, to_date('2014-06-27 09:00:00', 'YYYY-MM-DD hh24:mi:ss') from dual)
select * from v_data where trunc(dt) = date '2014-06-25'

其他不太常用的解决此问题的方法包括:

  • 使用 to_char('YYYY-MM-DD') 转换两个日期并检查是否相等
  • 使用 between 子句:WHERE dt between date '2014-06-25' and date '2014-06-26'

关于sql - 在 Oracle 中对日期使用 trunc 函数的原因,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24450761/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com