我在Sql Server表中有一個nvarchar列,用於存儲日期值,格式爲mm/yyyy。在nSQL Server中將nvarchar(mm/yyyy)轉換爲DateTIme
例:03/2017
現在怎麼把這個字符串轉換日期時間,這樣我可以比較這日期時間與當前日期時間(月相比,只有年)
我在Sql Server表中有一個nvarchar列,用於存儲日期值,格式爲mm/yyyy。在nSQL Server中將nvarchar(mm/yyyy)轉換爲DateTIme
例:03/2017
現在怎麼把這個字符串轉換日期時間,這樣我可以比較這日期時間與當前日期時間(月相比,只有年)
我們可以分裂,使這個發生,象下面這樣:
declare @v varchar(7)
select @v = '03.2017'
select convert(datetime,right(@v,4) + left(@v,2) + '01')
使用左,右:
SELECT CONVERT(DATETIME, RIGHT('03/2017', 4) + '-' + LEFT('03/2017', 2) + '-01')
嘗試
Convert(datetime,'01/' + [field],103)
如前所述,解析字符串是正確的做法,但我會添加這個,因爲它也顯示越來越當月的第一天來比較,那就是在原來的文章中提到。
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)
--now做你的比較.----
嗯,也許我的頭厚,但它並不像在OP要真正轉換NVARCHAR
價值爲datetime ......他只是想月份和年份從NVARCHAR
值到MONTH()
和實際DATETIME
值YEAR()
進行比較,措辭的難一點...
真正的答案,國際海事組織, 就是它 你不能 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)
;
我認爲這就是他想問的......?也許?
選擇一個RDBMS,mySQL或SQL Server? – apomene
SQL Server 2008 – Pearl