【问题标题】:SQL Server convert string to datetime failsSQL Server 将字符串转换为日期时间失败
【发布时间】:2015-02-12 04:36:49
【问题描述】:

我有这样的数据:

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

expdate 的数据类型是 varchar(7),我想知道从现在到 2015 年 3 月过期的 cookie 的名称。

我试过这个,但得到一个错误:

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

错误:

从字符串转换日期时间时转换失败。

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

谁能帮帮我?

谢谢

【问题讨论】:

  • 检查expdate列month的值是否大于12,如'13/2015'
  • 没有大于12的数据
  • 对我来说,它应该检查这个declare @date varchar(7)='12/2015'select convert(datetime,'01/'+@date,103)
  • 是的,NoDisplayName 我认为你是对的,数据扩展有问题,我尝试使用小数据,它的工作,转换数据没有错误

标签: sql sql-server string datetime


【解决方案1】:

这可以通过 where 子句中的简单 between 来完成,如下所示:

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')

【讨论】:

    【解决方案2】:

    试试:

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

    无需使用datediff 函数,您只需要检查expdate 是否在给定时间段之间。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-12-18
      • 1970-01-01
      • 1970-01-01
      • 2021-06-26
      相关资源
      最近更新 更多