簡體   English   中英

在SQL Server中將nvarchar(mm / yyyy)轉換為DateTIme

[英]Converting nvarchar (mm/yyyy) to DateTIme in Sql Server

我在Sql Server表中有一個nvarchar列,以mm / yyyy格式存儲日期值。

示例:03/2017

現在如何將此字符串轉換為日期時間,以便我可以將此日期時間與當前日期時間進行比較(僅比較月和年)

我們可以拆分並實現這一點,如下所示:

declare @v varchar(7)
select @v = '03.2017'

select convert(datetime,right(@v,4) + left(@v,2) + '01')

嘗試

Convert(datetime,'01/' + [field],103)

使用LEFT和RIGHT:

SELECT CONVERT(DATETIME, RIGHT('03/2017', 4) + '-' + LEFT('03/2017', 2) + '-01')

如前所述,解析字符串是正確的方法,但是我將添加它,因為它還顯示了獲取當前月份的第一天與之進行比較,並且在原始帖子中已經提到了。

DECLARE @test varchar(10) = '03/2017'

DECLARE @firstOfMonth datetime 
DECLARE @toCompare datetime 

SELECT @firstOfMonth = 
    CAST(CAST(YEAR(GETDATE()) AS VARCHAR(4)) + '/' + CAST(MONTH(GETDATE()) AS VARCHAR(2)) + '/01' AS DATETIME)

SELECT @toCompare = CONVERT(datetime, right(@test, 4) + '-' + left(@test, 2) + '-01')
declare @strDate nvarchar(10) = '03/2017'
declare @newDate datetime = null

select @newDate=  convert(date,replace(@strDate,'/','/1/'))

select month (@newdate)
select year (@newdate)

-現在做你的比較----

嗯,也許我頭腦很笨拙,但是OP似乎並不想將NVARCHAR值實際轉換為日期時間...他只是想將NVARCHAR值中的月份和年份與MONTH()YEAR()的實際DATETIME值,並且措辭有點差...

真正的答案IMO是您不能將MM / YYYY本身轉換為DATETIME值,這就是每個人都試圖添加月初的原因。 但是為什么不做這樣的事情...

SELECT *
FROM <sometable>
WHERE MONTH(<sometable>.<somecolumn>) = LEFT('03/2017',2)
AND YEAR(<sometable>.<somecolumn>) = RIGHT('03/2017',4)
;

並且由於OP還詢問了“當前日期時間,僅比較月份和年份”,因此您可以...

SELECT *
FROM <sometable>
WHERE MONTH(GETDATE()) = LEFT(<somecolumn>,2)
AND YEAR(GETDATE()) = RIGHT(<somecolumn>,4)
;

這就是他要問的...? 也許?

暫無
暫無

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

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