TSQL DatePart Week ww 格式 01 而不是 1

TSQL DatePart Week in ww format 01 instead of 1

从格式为 01 02 03 04 05 而不是 1 2 3 4 5 的日期中获取星期的最佳方法是什么?

请检查SQL left padding function如何实现如下

DECLARE @Dt datetime
SELECT @Dt='01-21-2008'
SELECT dbo.udfLeftSQLPadding( CAST( DATEPART(wk, @Dt) AS NVARCHAR),2,'0')

函数将 Replicate() 与 Right() 等其他函数一起使用,如下所示

SELECT RIGHT(Replicate('0', 2) + CAST( DATEPART(wk, @Dt) AS NVARCHAR), 2)

这是输出

DATEPART, RIGHT and STUFF的基本方法:

DECLARE @d date = '2016-01-01'

SELECT RIGHT(STUFF(DATEPART(week,@d),1,0,'0'),2)

输出:

01

STUFF在周数前加0,然后RIGHT从右边减去2个字符。

你也可以连接字符串

SELECT CASE WHEN DATEPART(week,@d) < 10 THEN '0' ELSE '' END +  DATEPART(week,@d)

最简单的方法是连接前导 0,然后取最右边的两个值:

select right(concat('00', DATEPART(week, getdate())), 2) as WeekNum

您不需要为此使用 udf...

dbo.udfLeftSQLPadding 的一种更快、性能更好的替代方法是具有相同逻辑的内联 table 值函数。它看起来像这样:

CREATE FUNCTION dbo.iTVFLeftSQLPadding 
(
  @String      varchar(100),
  @Length      smallint,
  @PaddingChar char(1) = '0'
)
RETURNS TABLE WITH SCHEMABINDING AS RETURN 
SELECT newstring = RIGHT(REPLICATE(@PaddingChar, @Length) + @String, @Length);

您可以在此处了解有关此技术的更多信息:http://www.sqlservercentral.com/articles/T-SQL/91724/