【问题标题】:How to retrieve date in a different format - SQL如何以不同的格式检索日期 - SQL
【发布时间】:2021-02-25 18:09:34
【问题描述】:

我有一个日期格式如下的列:2017-01-31 23:07:50.569000

在我的查询中,我正在使用

select * 
from tableA
where progress_datetime between 20200319 and 20200324

但是,这不会检索这些日期之间的行列表并给出无效错误。有谁知道我如何检索正确的日期而无需输入小时、分钟和秒的整个时间?

我正在使用 TERADATA。

谢谢。

【问题讨论】:

  • 列是什么数据类型?它在什么地方“似乎不起作用”?
  • 如果该列存储为日期数据类型,我认为您可以使用 between '20200319' and '20200324' 包括 ' 这样它就不会将其视为整数。
  • 没用 :(
  • 表示日期时间无效,我只想知道20200319到20200324之间的一切,不管时间。
  • 最好使用像date'2020-03-19'这样的ANSI日期常量语法。请注意,值 2017-01-31 23:07:50.569000 不是 DATE,它可能是 TIMESTAMP(6) - 但当您与DATE 值。

标签: sql teradata


【解决方案1】:

将字符串转换为日期类型:

select * 
from tableA
where progress_datetime between date '2020-03-19' and date '2020-03-24'

通过不修改progress_datetime的数据,可以使用该列上的索引,即使不修改,也比必须计算progress_datetime上的函数结果效率高得多表格中的每一行。

【讨论】:

    【解决方案2】:
    select * from tableA
    where  
    CAST(progress_datetime as DATE)
    between '2020-03-19' and '2020-03-24'
    

    progress_datetime 列看起来像是 Timestamp(6) 类型。上述转换将其转换为 ANSI 日期格式。

    您可以在此post 中找到有关提取日期和时间的更多信息。 同样,您可以阅读此documentation

    【讨论】:

      猜你喜欢
      • 2015-12-28
      • 1970-01-01
      • 2019-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-24
      • 1970-01-01
      • 2011-05-11
      相关资源
      最近更新 更多