[英]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.