【问题标题】:Error on converting date time to specific format in SQL Server在 SQL Server 中将日期时间转换为特定格式时出错
【发布时间】:2016-12-08 20:02:17
【问题描述】:

我是 SQL Server 的新手,遇到了一个问题。我正在尝试将yyyy-mm-dd 格式的日期时间转换为dd/mm/yyyy

使用下面的代码更改格式,如果dd <=12 效果很好,如果dd>12 则抛出错误The conversion of a varchar data type to a datetime data type resulted in an out-of-range value

Declare @LastTime datetime   
set @LastTime = '2015-06-12 12:08:18.690'      

 select convert(varchar, @LastTime, 101)

也尝试了其他输出格式(from here),但没有运气。有没有办法解决这个问题。我使用的是 SQL Server 2008 版本。在这里参考了很多帖子,但没有一个解决了这个问题。

提前致谢。

【问题讨论】:

    标签: sql-server sql-server-2008 datetime


    【解决方案1】:

    如果您只想更改日期格式,请尝试使用:
    设置日期格式 DMY 只需将它写在屏幕上,选择它并执行它,这将允许您以您想要的格式使用 DATE 类型,直到您关闭会话。 DATE 类型将是一个字符串

    【讨论】:

      【解决方案2】:

      错误来自set @LastTime = ... 而不是你的select convert(...)

      错误是因为您当前的dateformatdmy(默认语言隐式设置)

      如果您只想更改dateformat,那么set dateformat mdy; 将允许您使用字符串2016-06-13 设置@LastTime(2016 年6 月13 日)。

      如果您不想更改dateformat,您可以在设置@LastTime 时指定与convert 一起使用的字符串的样式,在本例中为121(@ 987654334@ 也可以)。

      rextester:http://rextester.com/CWZP33091

      试试这个:

      declare @LastTime datetime;
      set @LastTime = convert(datetime,'2015-06-12 12:08:18.690',121);
      
      select convert(varchar, @LastTime, 101);
      

      【讨论】:

      • 工作。感谢您的帮助。
      【解决方案3】:

      https://msdn.microsoft.com/en-us/library/ms187928.aspx 上查看有关 cast 和 convert 的 MSDN 文档

      我猜 103 样式最适合您。

      试试看

      选择转换(varchar,@LastTime,103)

      我现在没有机会查看它,因为我手头没有 MS SQL Server。

      由于样式 101 转换 'mm/dd/yyyy' 很清楚为什么 dd>12 会导致错误,因为 convert 尝试将 'mm' 转换为具有 1 - 12 有效值的月份,而您提供的 'dd' 1-31。

      希望对你有帮助

      保重

      安德烈亚斯

      【讨论】:

        猜你喜欢
        • 2019-11-02
        • 2019-08-03
        • 1970-01-01
        • 1970-01-01
        • 2021-05-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多