如何使用DatePart获得前导零?

时间:2016-01-04 19:54:21

标签: sql sql-server tsql sql-server-2008-r2

我的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

3 个答案:

答案 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)