繁体   English   中英

如何在sqlserver 2008中将nvarchar(50)转换为datetime

[英]how to convert nvarchar(50) to datetime in sqlserver 2008

嗨,我在SqlServer 2008中编写了此查询,但是出了点问题

select * from News_Table
where (DATEDIFF( DAY ,convert(datetime, NewsDate) , convert(datetime,@Todaydate )) <= @Count)

@NewsDate@Todaydate是两个这样保存的nvarchar参数2014/11/16

运行此查询给我一个错误:

Conversion failed when converting date and/or time from character string

尝试将正确的样式参数添加到您的convert函数中(请参见MSDN: link

CONVERT(DATETIME, NewsDate, 111) (111是YYYY / MM / DD的样式)

然后您得到:

SELECT * 
FROM  News_Table
WHERE (DATEDIFF( DAY ,
                 CONVERT(DATETIME, NewsDate, 111) , 
                 CONVERT(DATETIME,@Todaydate, 111)
               ) <= @Count)

要了解更多, 请点击这里

SELECT convert(datetime, '2014/11/16', 111) as datetime

OP

在此处输入图片说明

所以你的查询就是这样

Select * from News_Table
where (DATEDIFF( DAY ,convert(datetime, '2014/11/16', 111) , convert(datetime,@Todaydate,111 )) <= @Count)

使用Convert(datetime, @yourvalue, 111)

select * from News_Table
where (DATEDIFF( DAY ,convert(datetime, @NewsDate, 111) , convert(datetime,@Todaydate, 111 )) <= @Count)

http://www.sqlusa.com/bestpractices/datetimeconversion/

这样尝试

SELECT * 
FROM News_Table
WHERE (DATEDIFF(DAY,CAST(NewsDate AS Datetime),CAST(@Todaydate AS Datetime)) <= @Count)

您将需要执行以下操作将字符串转换为DATETIME数据类型

DECLARE @Date NVARCHAR(20) = '2013/11/16'

SELECT CAST((LEFT(@Date, 4) + SUBSTRING(@Date, 6 ,2) + RIGHT(@Date, 2)) AS DATETIME)

为您的查询

select * from News_Table
where (DATEDIFF( DAY , CAST((LEFT(NewsDate, 4) + SUBSTRING(NewsDate, 6 ,2) + RIGHT(NewsDate, 2)) AS DATETIME)
                     , CAST((LEFT(@Todaydate, 4) + SUBSTRING(@Todaydate, 6 ,2) + RIGHT(@Todaydate, 2)) AS DATETIME)
                ) <= @Count)

注意

如果变量@Todaydate实际上存储了今天的日期,那为什么不简单地使用GETDATE()函数呢?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM