Sql 如何将分隔的年(int)、月(int)和日(int)列转换为日期时间
我们的ERP系统在单独的int列中包含年、月和日。我想将这3个int列组合成一个DateTime,如何在SQL Server中转换它Sql 如何将分隔的年(int)、月(int)和日(int)列转换为日期时间,sql,sql-server,tsql,Sql,Sql Server,Tsql,我们的ERP系统在单独的int列中包含年、月和日。我想将这3个int列组合成一个DateTime,如何在SQL Server中转换它 Year | Month | Day -------------------- 2016 | 1 | 23 您可以使用(SQL Server 2012+): SQL Server 2008(假设该年份为4位数): 如注释中所建议,利用YYYYMMDD作为INT转换为DATE: SELECT CAST(CAST([year] * 10000 + [
Year | Month | Day
--------------------
2016 | 1 | 23
您可以使用(SQL Server 2012+
):
SQL Server 2008
(假设该年份为4位数):
如注释中所建议,利用
YYYYMMDD
作为INT
转换为DATE
:
SELECT CAST(CAST([year] * 10000 + [month]*100 + [day] AS VARCHAR(8))
AS DATE) AS DateTim
FROM table_name;
补遗
为了解决有关dateformat的问题,我们可以利用不受dateformat
或语言设置影响的数据格式:
yyyy-mm-ddThh:mm:ss[.mmm]
要处理1000年之前的年份,应使用零填充。我们可以使用SQL的转换函数获取日期时间值:
SELECT CONVERT(DATETIME, CONVERT(VARCHAR(2), Day) + '/' + CONVERT(VARCHAR(2), Month) + '/' + CONVERT(VARCHAR(4), Year),103) FROM Table_Name
@ayilmaz还有DATETIMEFROMPARTS
和更多的datetime函数:)不幸的是,服务器是2008年的。我能用什么?我会认为你的答案是正确的,顺便说一句,我认为一个比较简单的解决办法是将转换为日期(cast(年*10000+月*100+日为varchar(8))
,但这是相同的想法。@GordonLinoff是的,只有两个转换而不是4:)你可以跳过+'-
YYYYMMDD
格式适用于日期和日期时间。但是您应该注意,在左边用0填充月份和日期。
SELECT CAST(CAST([year] * 10000 + [month]*100 + [day] AS VARCHAR(8))
AS DATE) AS DateTim
FROM table_name;
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
SELECT CONVERT(DATETIME, CONVERT(VARCHAR(2), Day) + '/' + CONVERT(VARCHAR(2), Month) + '/' + CONVERT(VARCHAR(4), Year),103) FROM Table_Name