我遇到了这个奇怪的问题,需要将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数据类型会导致超出范围的值。
第二个查询工作正常。
答案 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)