2016-10-06 2 views

ответ

0

Самый простой способ состоит в конкатенации ваш ведущий 0 с, а затем взяв две крайние правые значения:

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

Вам не нужно UDF для этого. ..

0

Пожалуйста, проверьте SQL left padding function, как можно реализовать следующим образом

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

Функция использует Реплицировать() с другими функциями, как вправо(), и т.д., как показано ниже

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

Вот выход

enter image description here

+0

является то, что вы хотите ?? –

+0

<Комментарий удален> –

0

Основы с пути с DATEPART, RIGHT и STUFF:

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

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

Выход:

01 

STUFF добавляет 0 перед номером недели, затем RIGHT сокращений 2 символов с правой стороны.

0

Вы также можете Concat строки

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

Более быстрая и эффективная альтернатива 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/

Смежные вопросы