SQL Server - 将char数据类型转换为smalldatetime

时间:2014-04-01 01:38:53

标签: sql sql-server

我想知道是否有人可以帮助我。

我创建了一个小的SQL查询,但每次运行它时,都会出现以下错误

  

将char数据类型转换为smalldatetime数据类型导致了一个超出范围的smalldatetype值。

我试图运行的SQL如下:

UPDATE sales 
SET dateOut = '2014-04-31 12:32:46' 
WHERE userID = '11111' AND dateOut >= '2014-04-01 12:32:46'

非常感谢任何帮助。

干杯,

2 个答案:

答案 0 :(得分:2)

我不知道你为什么会收到这个错误。一种更安全的转换方式(因为它不会在系统日期/时间格式化首选项上转发)是使用convert()。所以你可以尝试:

UPDATE sales
    SET dateOut = convert(smalldatetime, '2014-04-31 12:32:46', 120)
    WHERE userID='11111' AND
          dateOut >= convert(smalldatetime, '2014-04-01 12:32:46', 120);

编辑:

DUH!四月只有30天。尝试做

UPDATE sales
    SET dateOut = convert(smalldatetime, '2014-04-30 12:32:46', 120)
    WHERE userID='11111' AND
          dateOut >= convert(smalldatetime, '2014-04-01 12:32:46', 120);

实际上,通过这种敏锐的观察,您的原件将使用正确的日期:

UPDATE sales
    SET dateOut ='2014-04-30 12:32:46'
    WHERE userID='11111' AND dateOut >= '2014-04-01 12:32:46';

答案 1 :(得分:0)

我有完全相同的问题,无法弄明白。原来,SQL服务器位于我正在运行代码的机器的不同时区。我用于DateTime对象的扩展方法使用英国日期格式,即使SQL Server管理工作室显示相同的日期格式,底层系统也没有使用此格式。

我能够使用以下内容使其正常工作。

System.DateTime currentdate = System.DateTime.Now;
string currentDateString = currentdate.Month + "/" + currentdate.Day + "/" + currentdate.Year;