传递变量时,日期时间到 varchar 的转换不起作用

Conversion of datetime to varchar not working when passing through variables

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

我 运行 这 2 个查询:

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)

第一个查询抛出错误:

The conversion of a varchar data type to a datetime data type resulted in an out-of-range value.

第二个查询工作正常。

失败发生在第一步,因为 @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服务器定义date/time的location-independent方法。警告:虽然这是正确的方法,但我通常会省略 T 以与其他数据库兼容(并且它仍然始终或几乎始终有效)。

如果我猜对了,您正在寻找 103 日期时间格式 (British/French),即 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)