传递变量时,日期时间到 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)
我遇到了这个奇怪的问题,我需要将 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)