SQL 将 datetime 转换为 varchar 时,Server 2008 结果不一致
SQL Server 2008 inconsistent results when converting datetime to varchar
我有一个包含两个日期时间列的 table,我正在尝试使用以下查询将它们转换为 iso 字符串格式:
select
CONVERT(VARCHAR(23), date1, 126) as date1,
CONVERT(VARCHAR(23), date2, 126) as date2
from
some_table
但我得到了两种不同的结果,一种有毫秒,一种没有
date1 date2
2015-03-11T05:16:04.663 2015-03-11T05:15:43
我查看了创建 table 脚本,它们都被定义为日期时间。我不知道如何插入数据。
如何让两列都达到 return 毫秒数?
因为第二个日期有0毫秒。
CREATE TABLE #Test ( date1 datetime, date2 datetime)
INSERT INTO #Test VALUES ('2015-03-11 05:16:04.663','2015-03-11 05:15:43' )
INSERT INTO #Test VALUES ('2015-03-11 05:16:04','2015-03-11 05:15:43.55' )
select
CONVERT(VARCHAR(23), date1, 126) as date1,
CONVERT(VARCHAR(23), date2, 126) as date2
from
#Test
检查这个例子。
SQL 服务器 "helpfully" 将 trim 毫秒部分,如果它完全为 0。如果你 需要 包括 0 毫秒(我可以不要想象你在做什么,你需要 .000
被包括在内)然后你必须检测 trimming 并重新添加它们:
;With Converted as (
--Your existing query. For this example, I'm just using one date:
select CONVERT(varchar(23),CONVERT(datetime,'2015-03-01T05:15:43.000'),126) as date2
)
select
CASE
WHEN LEN(date2) = 19 THEN date2 + '.000'
ELSE date2
END as date2
from Converted
(而且,如果出于某种奇怪的原因你真的需要最终结果是 varchar(23)
而不是 varchar(27)
你将不得不添加另一个 CONVERT
包装CASE
表达式,因为系统不够智能,无法意识到 CASE
returns 可以始终适合 varchar(23)
)
的任何值
我有一个包含两个日期时间列的 table,我正在尝试使用以下查询将它们转换为 iso 字符串格式:
select
CONVERT(VARCHAR(23), date1, 126) as date1,
CONVERT(VARCHAR(23), date2, 126) as date2
from
some_table
但我得到了两种不同的结果,一种有毫秒,一种没有
date1 date2
2015-03-11T05:16:04.663 2015-03-11T05:15:43
我查看了创建 table 脚本,它们都被定义为日期时间。我不知道如何插入数据。
如何让两列都达到 return 毫秒数?
因为第二个日期有0毫秒。
CREATE TABLE #Test ( date1 datetime, date2 datetime)
INSERT INTO #Test VALUES ('2015-03-11 05:16:04.663','2015-03-11 05:15:43' )
INSERT INTO #Test VALUES ('2015-03-11 05:16:04','2015-03-11 05:15:43.55' )
select
CONVERT(VARCHAR(23), date1, 126) as date1,
CONVERT(VARCHAR(23), date2, 126) as date2
from
#Test
检查这个例子。
SQL 服务器 "helpfully" 将 trim 毫秒部分,如果它完全为 0。如果你 需要 包括 0 毫秒(我可以不要想象你在做什么,你需要 .000
被包括在内)然后你必须检测 trimming 并重新添加它们:
;With Converted as (
--Your existing query. For this example, I'm just using one date:
select CONVERT(varchar(23),CONVERT(datetime,'2015-03-01T05:15:43.000'),126) as date2
)
select
CASE
WHEN LEN(date2) = 19 THEN date2 + '.000'
ELSE date2
END as date2
from Converted
(而且,如果出于某种奇怪的原因你真的需要最终结果是 varchar(23)
而不是 varchar(27)
你将不得不添加另一个 CONVERT
包装CASE
表达式,因为系统不够智能,无法意识到 CASE
returns 可以始终适合 varchar(23)
)