通过变量将日期时间转换为varchar不起作用

时间:2019-06-01 10:58:56

标签: sql sql-server-2008

我遇到了这个奇怪的问题,需要将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数据类型会导致超出范围的值。

第二个查询工作正常。

2 个答案:

答案 0 :(得分:1)

第一步失败是因为@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与其他数据库兼容(并且它始终或几乎始终起作用)。

答案 1 :(得分: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)