【发布时间】:2016-10-06 05:57:46
【问题描述】:
从格式为 01 02 03 04 05 而不是 1 2 3 4 5 的日期获取星期的最佳方法是什么?
【问题讨论】:
标签: sql sql-server tsql week-number datepart
从格式为 01 02 03 04 05 而不是 1 2 3 4 5 的日期获取星期的最佳方法是什么?
【问题讨论】:
标签: sql sql-server tsql week-number datepart
最简单的方法是连接前导0s,然后取最右边的两个值:
select right(concat('00', DATEPART(week, getdate())), 2) as WeekNum
您不需要为此使用 udf...
【讨论】:
请查看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)
这是输出
【讨论】:
你也可以连接字符串
SELECT CASE WHEN DATEPART(week,@d) < 10 THEN '0' ELSE '' END + DATEPART(week,@d)
【讨论】:
比 dbo.udfLeftSQLPadding 更快、性能更好的替代方案是具有相同逻辑的内联表值函数。它看起来像这样:
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/
【讨论】: