【问题标题】:How to convert separated Year(int), Month(int) and Day(int) columns into DateTime如何将分隔的 Year(int)、Month(int) 和 Day(int) 列转换为 DateTime
【发布时间】:2016-03-04 11:27:55
【问题描述】:

我们的 ERP 系统将年、月和日保存在单独的 int 列中。我想将这 3 个 int 列合并为一个 DateTime,如何在 SQL Server 中进行转换。

Year | Month | Day
--------------------
2016 | 1     | 23 

【问题讨论】:

    标签: sql sql-server tsql


    【解决方案1】:

    你可以使用DATEFROMPARTS(SQL Server 2012+):

    SELECT DATEFROMPARTS([Year], [Month], [Day]) AS DateTim
    FROM table_name
    

    SQL Server 2008(假设年份为 4 位):

    SELECT CAST(CAST([year]  AS VARCHAR(4)) + '-' + 
                CAST([month] AS VARCHAR(2)) + '-' + 
                CAST([day]   AS VARCHAR(2)) 
           AS DATE) AS DateTim
    FROM table_name;
    

    LiveDemo


    正如Gordon Linoff在评论中建议使用YYYYMMDD作为INT转换为DATE

    SELECT CAST(CAST([year] * 10000 + [month]*100 + [day] AS VARCHAR(8)) 
               AS DATE) AS DateTim
    FROM table_name;
    

    LiveDemo2

    附录

    为了解决ypercubeᵀᴹ对日期格式的担忧,我们可以使用不受DATEFORMATLANGUAGE 设置影响的ISO-8601

    yyyy-mm-ddThh:mm:ss[.mmm]

     SELECT CAST(RIGHT('000'+ CAST([year]  AS VARCHAR(4)),4) + '-' + 
                 RIGHT('0'  + CAST([month] AS VARCHAR(2)),2) + '-' + 
                 RIGHT('0'  + CAST([day]   AS VARCHAR(2)),2) + 'T00:00:00' AS DATE)
     FROM table_name
    

    LiveDemo3

    要处理 1000 之前的年份,应该用零填充。

    【讨论】:

    • @ayilmaz 还有DATETIMEFROMPARTS 和更多的日期时间功能:)
    • 不幸的是,服务器是2008。我还能用什么?顺便说一句,我会将你的答案标记为正确
    • 我认为更简单的解决方案是cast(cast(year * 10000 + month*100 + day as varchar(8)) as date),但它是相同的想法。
    • @GordonLinoff 是的,只有两次转换而不是 4 :)
    • 您可以跳过+ '-'YYYYMMDD 格式适用于日期和日期时间。但是你应该注意月份和日期在左边用 0 填充。
    【解决方案2】:

    我们可以使用 SQL 的 CONVERT 函数来获取日期时间值:

    SELECT CONVERT(DATETIME, CONVERT(VARCHAR(2), Day) + '/' + CONVERT(VARCHAR(2), Month) + '/' + CONVERT(VARCHAR(4), Year),103) FROM Table_Name
    

    【讨论】:

      猜你喜欢
      • 2010-12-27
      • 1970-01-01
      • 1970-01-01
      • 2011-01-22
      • 1970-01-01
      • 2014-05-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多