【问题标题】:Odd result using Oracle trunc()?使用 Oracle trunc() 的奇怪结果?
【发布时间】:2019-06-10 06:53:36
【问题描述】:

为什么

select trunc(to_date('23/06/2017','DD/MM/YYYY'), 'DAY') from dual;

返回

19.06.17

而不是预期的

23.06.17?

我们正在使用 Oracle 11。

【问题讨论】:

  • 'DAY' 截断到一周的开始:docs.oracle.com/en/database/oracle/oracle-database/12.2/sqlrf/… - 但问题是你为什么使用trunc() 开始? select to_date('23/06/2017','DD/MM/YYYY') from dual; 已经返回你想要的东西了
  • @a_horse_with_no_name select trunc(END_TIME, 'DD') from KROWA 其中 KROWA 是 WITH clouse 的别名。当我用trunc() 替换to_date() 时,我得到date format picture ends before converting entire input string
  • @adakozu - 你在传递日期或字符串时感到困惑。您的问题显示您从字符串开始并将其转换为日期 - 时间在午夜 - 这使得 trunc() 毫无意义。如果您真的从日期变量/列开始,那么 trunc 更有意义(但使用 DD 而不是 DAY);但不要将已经是日期的内容传递给to_date()。那是不是所建议的。我们只能继续您告诉我们您正在做的事情 - 如果您提供的建议与您真正正在做的事情有很大不同,我们不能责怪我们......
  • @AlexPoole 我感谢所有的建议。以后我会保持我的陈述更清晰。

标签: oracle function truncate


【解决方案1】:

DAY 截断到最近的 SUNDAY [1]

你可以使用DD

select trunc(to_date('23/06/2017','DD/MM/YYYY'), 'DD') from dual;

【讨论】:

  • 它并不总是世界上最近的星期日,它取决于NLS_TERRITORY 参数。试试ALTER SESSION SET nls_territory='UNITED KINGDOM';,日期输出将是星期一。
【解决方案2】:

DAY 格式返回一周中最近的开始日期。根据您的数据库配置,这可能是星期日、星期一(在您的情况下)...

您可能需要DD 格式。

Oracle doc

【讨论】:

    【解决方案3】:

    你的格式不对,应该是DD format:

    select trunc(to_date('23/06/2017','DD/MM/YYYY'), 'DD') from dual;
    

    ROUND 和 TRUNC 日期函数的日期格式模型

    DDD DD Ĵ 天

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-09-14
      • 2011-12-19
      • 1970-01-01
      • 1970-01-01
      • 2012-01-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多