Ari*_*MAZ 2 sql t-sql sql-server
我们的ERP系统在单独的int列中保存年,月和日.我想将这3个int列合并为一个DateTime,如何在SQL Server中将其转换.
Year | Month | Day
--------------------
2016 | 1 | 23
Run Code Online (Sandbox Code Playgroud)
Luk*_*zda 10
你可以使用DATEFROMPARTS(SQL Server 2012+):
SELECT DATEFROMPARTS([Year], [Month], [Day]) AS DateTim
FROM table_name
Run Code Online (Sandbox Code Playgroud)
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;
Run Code Online (Sandbox Code Playgroud)
正如戈登·利诺夫在评论提出利用YYYYMMDD作为INT转换为DATE:
SELECT CAST(CAST([year] * 10000 + [month]*100 + [day] AS VARCHAR(8))
AS DATE) AS DateTim
FROM table_name;
Run Code Online (Sandbox Code Playgroud)
为了解决ypercubeᵀᴹ对dateformat的担忧,我们可以利用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
Run Code Online (Sandbox Code Playgroud)
处理1000之前的年份应该用零填充.