【问题标题】:SQL yyyymm date formattingSQL yyyymm 日期格式
【发布时间】:2014-05-31 19:12:56
【问题描述】:

我有一个 YYYYMM-Example 201204 格式的月份列,我需要将它分成两列 year(2012) 和 month(04)????

我曾尝试使用 Ltrim 和 Rtrim 进行拆分,但并没有真正奏效。

【问题讨论】:

  • 你用的是什么关系型数据库?
  • 试试 DATEPART(year, date) 和 DATEPART(month, date) (mssql)
  • LTRIMRTRIM 用于删除字符串末尾的空格。你的意思是LEFTRIGHT,它们返回左右子串?
  • 该列是 VARCHAR/CHAR 列还是 INT 列?因为解析 VARCHAR/CHAR 列与解析 INT 列非常不同。

标签: sql date time split


【解决方案1】:

这需要字符串操作,这因数据库而异。一个典型的方法是:

select substr(col, 1, 4) as yyyy, substr(col, 5, 2) as mm

在某些数据库中,函数为substring()。大多数数据库支持substr()substring()

【讨论】:

    【解决方案2】:

    试试

    select yyyy = datepart( year  , t.datetime_column ) ,
           mm   = datepart( month , t.datetime_column ) ,
           ...
    from dbo.some_table t
    

    或者

    select yyyy = year(  t.datetime_column ) ,
           mm   = month( t.datetime_column ) ,
           ...
    from dbo.some_table t
    

    或者,如果列是字符串:

    select yyyy = convert(int, left(  t.some_column , 4 ) ) ,
           mm   = convert(int, right( t.some_column , 2 ) ) ,
           ...
    from dbo.some_table t
    where t.some_column like '[0-9][0-9][0-9][0-9][0-9][0-9]'
    

    【讨论】:

      【解决方案3】:

      假设 Oracle(因为没有指定)和 varchar/char 这将是另一种选择:

      select 
          extract(year from (to_date('201204', 'yyyymm'))) year, 
          extract(month from (to_date('201204', 'yyyymm'))) month 
      from dual;
      

      首先,转换为日期,然后使用提取函数获取月份和年份。假设月份总是两个字符和第四年。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-07-07
        • 1970-01-01
        • 2022-06-15
        • 1970-01-01
        • 2021-09-03
        • 1970-01-01
        • 1970-01-01
        • 2011-04-06
        相关资源
        最近更新 更多