Sql server 2012 CASE表达式中的日期格式查询
我试图在下面的SQL中输出日期格式Sql server 2012 CASE表达式中的日期格式查询,sql-server-2012,case,date-formatting,Sql Server 2012,Case,Date Formatting,我试图在下面的SQL中输出日期格式 CASE WHEN E.A_EXTTRNDTETME IS NOT NULL then LEFT(E.A_EXTTRNDTETME, 4) +SUBSTRING(E.A_EXTTRNDTETME, 5, 2)+SUBSTRING(E.A_EXTTRNDTETME, 7, 2) +'-'+SUBSTRING(E.A_EXTTRNDTETME, 9, 2)+':'+SUBSTRING(E.A_EXTTRNDTETME, 11, 2) +':
CASE
WHEN E.A_EXTTRNDTETME IS NOT NULL then LEFT(E.A_EXTTRNDTETME, 4)
+SUBSTRING(E.A_EXTTRNDTETME, 5, 2)+SUBSTRING(E.A_EXTTRNDTETME, 7, 2)
+'-'+SUBSTRING(E.A_EXTTRNDTETME, 9, 2)+':'+SUBSTRING(E.A_EXTTRNDTETME, 11, 2)
+':'+SUBSTRING(E.A_EXTTRNDTETME, 13,2)+'.'+SUBSTRING(E.A_EXTTRNDTETME, 15,3)
WHEN E.A_EXTTRNDTETME IS NULL then
(
SELECT TOP 1 A_EXTTRNDTETME FROM T_ATH_EXE
WHERE A_PAREXEID = E.A_EXEID ORDER BY A_ADDDTETME
)
ELSE ' text'
END as [TransactTime],
第二个WHEN语句返回20180322141422883,但我希望它采用以下格式,就像第一个分支中的值一样:
20180322-14:14:22.883
但是不知道如何在SELECT语句中执行,请提供帮助。您可以将整个查询放入子查询,因此只需应用一次格式设置。您还可以使用COALESCE,这只是在不为NULL时编写CASE的一种较短的方法,而不是到此为止。最后,还有用于格式化日期时间值的内置样式选项,可以避免您看到的所有混乱的字符串操作
我使用以下方法使其工作:- 案例 当E.A_exttrndtetem为空时,选择前1个LEFTA_exttrndtetem,4+SUBSTRINGA_exttrndtetem,5,2+SUBSTRINGA_exttrndtetem,7,2+'-'+SUBSTRINGA_exttrndtetem,9,2+':'+SUBSTRINGA_exttrndtetem,11,2+'+SUBSTRINGA_exttrndtetem,13,2+'.+SUBSTRINGA_exttrndtetem,15,3 FROM T_EXE,其中axeid=E 当E.A_exttrndteme不为空时,则LEFTE.A_exttrndteme,4+子字符串E.A_exttrndteme,5,2+子字符串E.A_exttrndteme,7,2+'-'+子字符串E.A_exttrndteme,9,2+':'+子字符串E.A_exttrndteme,11,2+':'+子字符串E.A_exttrndteme,13,2+'+子字符串E.A_exttrndteme,15,3 其他“文本”
结束为[Transact-Time],可能重复@Stefan我不太同意,这里的主要问题是计算的逻辑/顺序,而不是简单的格式设置。@Aaron您好,我是否可以用与上一行相同的方式包含格式设置。这个问题还有很多,而这只是其中的一小部分?
SELECT *, TransactTime = COALESCE
(
CONVERT(char(8), dt, 112) + '-' + CONVERT(char(12), dt, 108),
' text'
)
FROM -- your larger query here
(
SELECT
dt = COALESCE
(
E.A_EXTTDNDTETME,
(
SELECT TOP (1) A_EXTTRNDTETME
FROM T_ATH_EXE
WHERE A_PAREXEID = E.A_EXEID
ORDER BY A_ADDDTETME
)
), -- other columns...
FROM -- table...
) AS sub;