我的TSQL查询的SELECT部分中有这个部分:
CAST(DATEPART(HOUR,s.Arr) AS VARCHAR) + CAST(DATEPART(MINUTE,s.Arr) AS VARCHAR),
原始s.Arr
字段如下所示:
2016-01-04 04:43:00.000
目标是让它看起来像:
0443
但是现在我的SQL看起来像是:
443
因为它没有抓住领先的零。我如何抓住前导零?有没有办法在没有像填充零的黑客方法的情况下做到这一点?
服务器:2008 R2
答案 0 :(得分:2)
使用SQL Server 2012+
,您可以使用FORMAT
:
DECLARE @d DATETIME = '2016-01-04 04:43:00.000';
SELECT FORMAT(@d, 'HHmm');
-- 0443
的 LiveDemo
强>
SQL Server 2008
不使用0
填充:
DECLARE @d DATETIME = '2016-01-04 04:43:00.000';
SELECT REPLACE(LEFT(CONVERT(VARCHAR(100), @d, 14),5), ':', '');
-- 0443
的 LiveDemo2
强>
风格: 14 hh:mi:ss:mmm(24h)
答案 1 :(得分:0)
试试这个:我假设日期格式不会改变。
声明@dt varchar(max)=' 2016-01-05 09:42:18.717'
选择SUBSTRING(转换(varchar(255),@ dt),12,len(@dt) - (len(@dt)-2))+ SUBSTRING(转换(varchar(255),@ dt),15 ,LEN(@dt) - (LEN(@dt)-2))
答案 2 :(得分:0)
用00填充并右转两次
RIGHT('00' + CAST(DATEPART(HOUR,s.Arr) AS VARCHAR),2) + RIGHT('00' + CAST(DATEPART(MINUTE,s.Arr) AS VARCHAR),2)