我们的 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;
作为 Gordon Linoff 在评论中提议利用 YYYYMMDD
作为 INT
转换为 DATE
:
SELECT CAST(CAST([year] * 10000 + [month]*100 + [day] AS VARCHAR(8))
AS DATE) AS DateTim
FROM table_name;
附录
地址 ypercubeᵀᴹ 关于我们可以利用的日期格式的担忧 ISO-8601
这不受 DATEFORMAT
或 LANGUAGE
设置的影响:
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
处理 1000 之前的年份应该用零填充。
关于sql - 如何将分离的 Year(int)、Month(int) 和 Day(int) 列转换为 DateTime,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35794902/