【问题标题】:How to convert an YYYY-MM-DD date to YYYY-MM date如何将 YYYY-MM-DD 日期转换为 YYYY-MM 日期
【发布时间】:2018-04-11 23:26:00
【问题描述】:

在 SQL 中。如何将 A 列从 (YYYY-MM-DD) 转换为 (YYYYMM)?我想以 YYYYMM 格式显示日期,而不是 YYYY-MM-DD。

数据类型是 TIMESTAMP。使用 Teradata Studio 15.10.10。

【问题讨论】:

  • A列的数据类型是什么?...什么DBMS
  • 到目前为止您尝试了什么,错误是什么?
  • 删除-s.
  • 你用的是什么数据库引擎?
  • SQL 是一种语言标准,但每个 RDBM 实现它的方式非常不同 - 尤其是任何日期函数,请指定您所指的数据库。

标签: sql teradata


【解决方案1】:

对于 Teradata,请使用

to_char(tscol, 'YYYYMM') -- varchar result

extract(year from tscol) * 100 + extract(month from tscol) -- integer result

【讨论】:

    【解决方案2】:

    您需要 3 个功能。

    MONTH() 函数。返回 1 到 12 (一月到十二月)范围内日期的 MONTH。当日期的 MONTH 部分为 0 时返回 0。

    YEAR() 函数。返回一个 4 位数的 YEAR。

    CONCAT() 函数用于将两个或多个字符串连接在一起。

    所以这里是结合这 3 个函数的例子。

    SELECT CONCAT(YEAR('1969-02-18'),MONTH('1969-02-18'))

    或者你可以和

    合二为一

    选择 DATE_FORMAT('1969-02-18','%Y%m')

    所以要回答您的问题,如果它指的是 A 列,您可以使用

    SELECT DATE_FORMAT(A,'%Y%m')

    SQL 小提琴: http://www.sqlfiddle.com/#!9/a6c585/48362

    【讨论】:

    • “语法错误:数据类型“A”与定义的类型名称不匹配”
    • 我用 SELECT DATE_FORMAT(A, '%Y%m') FROM table 进行了测试。我的 A 是时间戳 - 可能单独测试 MONTH() 或 YEAR()。
    【解决方案3】:

    在 Teradata 中,您几乎可以随意格式化日期。要获得 YYYYMM,您可以使用

    select <your date> (format 'yyyymm') (char(6))
    

    您的日期列需要是实际日期,而不是字符串。

    【讨论】:

      【解决方案4】:

      您可以使用 DATEPART 获取日期的年份和月份部分,转换为 varchar、pad 和串联。

      SELECT DATEPART(YEAR,GETDATE()) 
      SELECT DATEPART(MONTH,GETDATE()) 
      
      SELECT CAST(DATEPART(YEAR,GETDATE())  AS VARCHAR(4)) + RIGHT('00' + CAST(DATEPART(MONTH,GETDATE())  AS VARCHAR(2)),2)
      

      【讨论】:

      • 对未指定 dbms 的问题的产品特定答案。至少告诉我们这是用于哪个 dbms。
      猜你喜欢
      • 1970-01-01
      • 2023-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-22
      • 2013-10-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多