【问题标题】:Conversion of datetime to varchar not working when passing through variables传递变量时将 datetime 转换为 varchar 不起作用
【发布时间】:2019-06-01 10:58:55
【问题描述】:

我遇到了这个奇怪的问题,我需要将datetime 转换为varchar

我运行了这两个查询:

declare @d datetime 
set @d ='31/12/2019 16:12:25.317'

select @d

select convert(varchar(50), '31/12/2019 16:12:25.317', 101)

第一个查询抛出错误:

将 varchar 数据类型转换为 datetime 数据类型导致值超出范围。

第二个查询工作正常。

【问题讨论】:

标签: sql sql-server-2008


【解决方案1】:

如果我猜对了,您正在寻找 103 日期时间格式(英国/法国),即 DD/MM/YYYY。这种情况你可以在下面试试这个-

DECLARE @d DATETIME
SET @d =CONVERT(DATETIME, '31/12/2019 16:12:25.317',103)

SELECT @d

SELECT CONVERT(DATETIME, '31/12/2019 16:12:25.317', 103)

【讨论】:

    【解决方案2】:

    失败发生在第一步,因为@d 被声明为datetime 而不是字符串(除非您的国际化设置允许)。我想你打算:

    declare @d varchar(255) 
    set @d = '31/12/2019 16:12:25.317';
    
    select convert(date, @d, 103)
    

    一般来说,在设置日期时间常量时,你应该使用:

    declare @d datetime;
    set @d = '2019-12-31T16:12:25.317';
    

    这是 SQL Server 定义日期/时间的与位置无关的方法。警告:虽然这是正确的方法,但我通常会省略 T 以与其他数据库兼容(它仍然始终或几乎始终有效)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-11-29
      • 1970-01-01
      • 2016-12-09
      • 1970-01-01
      • 2018-07-03
      • 2010-09-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多