2017-02-20 66 views
0

我在Sql Server表中有一個nvarchar列,用於存儲日期值,格式爲mm/yyyy。在nSQL Server中將nvarchar(mm/yyyy)轉換爲DateTIme

例:03/2017

現在怎麼把這個字符串轉換日期時間,這樣我可以比較這日期時間與當前日期時間(月相比,只有年)

+3

選擇一個RDBMS,mySQL或SQL Server? – apomene

+0

SQL Server 2008 – Pearl

回答

3

我們可以分裂,使這個發生,象下面這樣:

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

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

使用左,右:

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

嘗試

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

如前所述,解析字符串是正確的做法,但我會添加這個,因爲它也顯示越來越當月的第一天來比較,那就是在原來的文章中提到。

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') 
0
declare @strDate nvarchar(10) = '03/2017' 
declare @newDate datetime = null 

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

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

--now做你的比較.----

0

嗯,也許我的頭厚,但它並不像在OP要真正轉換NVARCHAR價值爲datetime ......他只是想月份和年份從NVARCHAR值到MONTH()和實際DATETIMEYEAR()進行比較,措辭的難一點...

真正的答案,國際海事組織, 就是它 你不能 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) 
; 

認爲這就是他想問的......?也許?

相關問題