【发布时间】:2016-03-04 11:27:55
【问题描述】:
我们的 ERP 系统将年、月和日保存在单独的 int 列中。我想将这 3 个 int 列合并为一个 DateTime,如何在 SQL Server 中进行转换。
Year | Month | Day
--------------------
2016 | 1 | 23
【问题讨论】:
标签: sql sql-server tsql
我们的 ERP 系统将年、月和日保存在单独的 int 列中。我想将这 3 个 int 列合并为一个 DateTime,如何在 SQL Server 中进行转换。
Year | Month | Day
--------------------
2016 | 1 | 23
【问题讨论】:
标签: sql sql-server tsql
你可以使用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ᵀᴹ对日期格式的担忧,我们可以使用不受DATEFORMAT 或LANGUAGE 设置影响的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
要处理 1000 之前的年份,应该用零填充。
【讨论】:
DATETIMEFROMPARTS 和更多的日期时间功能:)
cast(cast(year * 10000 + month*100 + day as varchar(8)) as date),但它是相同的想法。
+ '-'。 YYYYMMDD 格式适用于日期和日期时间。但是你应该注意月份和日期在左边用 0 填充。
我们可以使用 SQL 的 CONVERT 函数来获取日期时间值:
SELECT CONVERT(DATETIME, CONVERT(VARCHAR(2), Day) + '/' + CONVERT(VARCHAR(2), Month) + '/' + CONVERT(VARCHAR(4), Year),103) FROM Table_Name
【讨论】: