![](/img/trans.png)
[英]SQL Server 2000 trouble converting nvarchar to 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.