sql - 如何将分离的 Year(int)、Month(int) 和 Day(int) 列转换为 DateTime

标签 sql sql-server tsql

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

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

最佳答案

你可以使用 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ᵀᴹ 关于我们可以利用的日期格式的担忧 ISO-8601这不受 DATEFORMATLANGUAGE 设置的影响:

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 之前的年份应该用零填充。

关于sql - 如何将分离的 Year(int)、Month(int) 和 Day(int) 列转换为 DateTime,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35794902/

相关文章:

sql - 在Big Query中查询多个表

sql - 两个日期之间的周数

sql-server - 为什么 SQL Server 查询优化器有时会忽略明显的聚簇主键?

sql-server - 如何在 Visual Studio 中创建与 SQL Server 的连接?获取 SqlException : Login failed for user

sql-server - 需要帮助 Local.name(.) xquery 函数

mysql - 从单个表中获取前 10 个最近更新或创建的记录

SQL删除表中的重复项

sql-server - 从 SQL Server 查询 "Microsoft.ACE.OLEDB.12.0"提供程序时出错

sql - 计算存储过程中的百分比

SQL 性能,使用 OPTION (FAST n)