在nSQL Server中将nvarchar(mm/yyyy)转换为DateTIme
问题描述:
我在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