【问题标题】:SQL Server - The conversion of char data type to smalldatetimeSQL Server - char 数据类型到 smalldatetime 的转换
【发布时间】:2014-04-01 01:38:52
【问题描述】:

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

我创建了一个小的 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'

任何帮助将不胜感激。

干杯,

【问题讨论】:

    标签: sql sql-server


    【解决方案1】:

    我不知道您为什么会收到此错误。进行转换的一种更安全的方法(因为它不依赖系统日期/时间格式首选项)是使用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);
    

    编辑:

    呃!四月只有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';
    

    【讨论】:

    • 感谢您的回答,但我仍然看到错误
    • @BigJobbies 。 . . dateOut的数据类型是什么?
    • 在设计中,写着 smalldatetime
    • @BigJobbies 。 . .这很奇怪,因为转换工作在 update 查询之外。
    • 我不确定我还能尝试什么
    【解决方案2】:

    我遇到了完全相同的问题,但无法解决。原来 SQL 服务器与我运行代码的机器位于不同的时区。我用于 DateTime 对象的扩展方法使用的是英国日期格式,即使 SQL Server 管理工作室显示相同的日期格式,底层系统也没有使用这种格式。

    我能够使用以下方法使其工作。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-06-03
      • 2012-06-26
      • 1970-01-01
      • 1970-01-01
      • 2017-10-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多