我有一个包含两个日期时间列的表,我正在尝试使用以下查询将它们转换为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
我查看了create table脚本,它们都被定义为datetime。我不知道如何插入数据。
如何让两列都以毫秒返回?
答案 0 :(得分:1)
SQL Server“有帮助”将修剪毫秒部分,如果它完全为0.如果你需要包括0毫秒(我无法想象你在需要的地方做什么{{1}要包括在内)然后你必须检测修剪并重新添加它们:
.000
(而且,如果出于某些奇怪的原因,你真的需要最终结果是;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)
来包裹{ {1}}表达式,因为系统不够聪明,无法意识到CONVERT
返回的任何值总是适合CASE
)
答案 1 :(得分:0)
这是因为第二个日期有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
检查此示例。