簡體   English   中英

在SQL Server中將int值轉換為datetime

[英]convert int values to datetime in sql server

我需要使用sql server在datetime中轉換年,月和日的int值。

其實我在用這個

DECLARE @MONTH INT
DECLARE @YEAR INT
DECLARE @DAY  INT
DECLARE @MAXDATE DATETIME
DECLARE @MINDATE DATETIME

SET @MONTH=12
SET @YEAR=2010
SET @DAY=1


SET @MINDATE=CONVERT(DATE,CAST (@YEAR AS VARCHAR)+ RIGHT ('0'+ CAST (@MONTH AS VARCHAR),2) + RIGHT ('0'+ CAST (@DAY AS VARCHAR),2))

SELECT @MINDATE

並且可以正常工作,但是我想知道是否存在更好的方法來轉換這些值。

這會更簡單一些:

select dateadd(month,(@YEAR-1900)* 12 + @MONTH - 1,0) + (@DAY-1)

我認為您絕對有正確的方法來做到這一點。 您已經在零個位數的月份和日期中填充了零; 您的解決方案將很好地工作,並且不會不整潔。

唯一的其他方法是給任意日期加上“起始”年,月和日。 但是,這並不是一個好計划,因為根據我的估算,您需要從12月31日0 AD開始。 這與您當前正在做的簡單解析組件相比沒有多大意義。

根據“更好的方式”的意思,您可能會發現不同的答案可以接受。 例如,從字符串轉換可能比在腳本中完成轉換更簡單(因此更好)。 像這樣:

SET @MINDATE = CAST(@YEAR AS varchar) + '-' +
               CAST(@MONTH AS varchar) + '-' +
               CAST(@DAY AS varchar)

也就是說,如果您的變量是datetime ,則轉換將是隱式的,因此無需使用CONVERT 據我所知,這里選擇的格式是YYYY-MM-DD ,或者更確切地說是YYYY-MD ,無論區域設置如何,隱式轉換都可以接受。

編輯:如果我沒有記錯的話,您選擇的格式YYYYMMDD也與語言環境無關。 我的觀點只是,它需要一個更復雜的表達式才能從整數構建正確的字符串,這似乎給您帶來不便。

直到我知道用內置函數都無法將其轉換。 如果可以將年,月和日聲明為varchar,則可能會更容易:

SET DATEFORMAT YMD;
SET @MAXDATE = @YEAR+'/'+@MONTH+'/'+@DAY
SELECT @MAXDATE

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM