2014-12-13 183 views
1

我有这样的数据:SQL服务器字符串转换为日期时间失败

+-----+---------+----------+ 
| id | name | expdate | 
+-----+---------+----------+ 
| 1 | chookies| 02/2015 | 
| 2 | snack | 03/2015 | 
| 3 | snack1 | 04/2015 | 
+-----+---------+----------+ 

expdate数据类型为varchar(7),我想知道在那里截止日期从现在到03/2015饼干的名称。

我想这一点,但得到一个错误:

select  
    id, name, 
    convert(datetime, '01/' + expdate, 103) 
from 
    cookies 
where 
    datediff(month, datetime, convert(datetime, '01/' + expdate, 103)) 

错误:

Conversion failed when converting datetime from character string.

我使用SQL Server 2005中,我缺少什么?

任何人都可以帮助我吗?

谢谢

+0

检查'expdate'列'month'值是否大于'12'如'13/2015'' – 2014-12-13 16:33:25

+0

有没有数据大于12 – empugandring 2014-12-13 16:37:27

+1

对我来说它的工作原理是它应该检查这个'declare @date varchar (7)= '12/2015'' '选择转换(日期时间,'01 /' + @日,103)' – 2014-12-13 16:40:57

回答

0

尝试:

select 
    id, name, expdate 
from 
    cookies 
where 
    convert(datetime, '01/' + expdate, 103) between getdate() 
               and convert(datetime, '01/03/2015', 103) 

没有必要使用datediff功能,你只需要检查expdate是一定时期内之间。

此外,您会收到此错误,因为datediff函数中的第二个参数应该是有效的日期,而不仅仅是字符串'datetime'。

1

这可以用一个简单的where子句中完成之间,像这样:

select id,name,convert(datetime,'01/'+expdate,103) 
from cookies 
where convert(datetime,'01/'+expdate,103) between getdate() and convert(datetime,'2015-03-01 00:00:00.000') 
相关问题