【问题标题】:SQL Query to Combine Dates用于组合日期的 SQL 查询
【发布时间】:2021-01-04 19:16:24
【问题描述】:

我有一个日期如下的数据集:

MM    DD    YY
2     8     10
3     9     11
4     10    12

我正在尝试编写一个查询,将单列中的日期显示为 MM/DD/YY

任何帮助将不胜感激,谢谢

【问题讨论】:

  • 这些列的数据类型是什么,结果应该是什么数据类型?
  • 你的年份真的没有世纪吗?

标签: sql string datetime teradata


【解决方案1】:

假设您的年份是 21 世纪,您可以在下面执行此操作。

 select to_Date(lpad(MM,2,'0')|| '/' ||lpad(DD,2,'0')|| '/20' ||lpad(YY,2,'0'),'MM/DD/YYYY') as Date_field 
 from my_Table;

这是 Oracle 中的演示 - https://dbfiddle.uk/?rdbms=oracle_11.2&fiddle=1ba6814d793f2b8b269611e348540f6c。这也适用于 Teradata。

【讨论】:

  • 不需要包含斜线,只需MM|DD|'20'YY, 'MMDDYYYY'
【解决方案2】:

Teradata 实际上将日期存储为整数,如explained in the documentation

Teradata Database 使用以下公式将每个 DATE 值存储为一个四字节整数:(year - 1900) * 10000 + (month * 100) + day

如果您想从您的数字中生成 date 数据类型的结果,您可以这样做:

cast((yy + 100) * 10000 + mm * 100 + dd as date)

另一方面,如果您只想要mm/dd/yy 格式的字符串,使用字符串函数可能更简单;我们只需要用0 填充1 位值:

lpad(mm, 2, '0') || '/' || lpad(dd, 2, '0') || '/' || lpad(yy, 2, '0')

【讨论】:

    【解决方案3】:

    如果您不介意数据格式,可以将它们连接起来。

    select MM || '/' || 'DD' || '/' || YY DATE_COL from T
    

    您也可以将其转换为日期

    select to_Date(MM || '/' || 'DD' || '/' || YY, 'MM/DD/YY') DATE_COL from T
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-21
      • 1970-01-01
      • 2010-09-13
      • 2022-10-15
      • 2013-12-08
      • 1970-01-01
      相关资源
      最近更新 更多