Формат T-SQL от целого числа до двухзначной строки - PullRequest
32 голосов
/ 16 декабря 2009

Я не могу найти простой способ сделать это в T-SQL.

У меня есть, например, столбец (SortExport_CSV), который возвращает целое число от 2 до 90. Если сохраненное число представляет собой одну цифру, мне нужно преобразовать ее в двухзначную строку, которая начинается с 0. Я пытался использовать CAST, но я застрял на том, как отобразить стиль в предпочтительном формате (0 #)

Конечно, это легко сделать на внешнем интерфейсе (SSRS, MSAccess, Excel и т. Д.), Но в этом случае у меня нет внешнего интерфейса, и я должен предоставить необработанный набор данных с уже отформатированной двухзначной строкой.

Ответы [ 14 ]

52 голосов
/ 16 декабря 2009
select right ('00'+ltrim(str( <number> )),2 )
18 голосов
/ 28 ноября 2014

Вы можете использовать встроенную функцию форматирования T-SQL:

declare @number int  = 1
select format (@number, '0#')
18 голосов
/ 16 декабря 2009
SELECT RIGHT('0' + CAST(sortexport_csv AS VARCHAR), 2)
FROM your_table
7 голосов
/ 07 июня 2012

Вы все делаете слишком много работы:

right(str(100+@x),2)

-- for a function, same idea: 
--
create function zeroPad( @yourNum int, @wid int)
as 
begin
  return right( 1000000+@yourNum), @wid)
end
5 голосов
/ 16 декабря 2009

Преобразуйте значение в строку, добавьте ноль перед ним (так, чтобы это было два или древовидные символы) и получите последний символ:

right('0'+convert(varchar(2),Sort_Export_CSV),2)
3 голосов
/ 15 ноября 2012
DECLARE @Number int = 1;
SELECT RIGHT('0'+ CONVERT(VARCHAR, @Number), 2)
--OR
SELECT RIGHT(CONVERT(VARCHAR, 100 + @Number), 2)
GO
2 голосов
/ 24 июля 2013

Вы можете попробовать это

SELECT RIGHT( '0' + convert( varchar(2) , '0' ),  2 ) -- OUTPUTS : 00
SELECT RIGHT( '0' + convert( varchar(2) , '8' ),  2 ) -- OUTPUTS : 08
SELECT RIGHT( '0' + convert( varchar(2) , '9' ),  2 ) -- OUTPUTS : 09
SELECT RIGHT( '0' + convert( varchar(2) , '10' ), 2 ) -- OUTPUTS : 10
SELECT RIGHT( '0' + convert( varchar(2) , '11' ), 2 ) -- OUTPUTS : 11

это должно помочь

1 голос
/ 17 декабря 2009

Попробуйте это

- Создать число от 2 до 90

;with numcte as(
select 2 as rn
union all
select rn+1 from numcte where rn<90)

- Программа, которая форматирует число на основе длины

select case when LEN(rn) = 1 then '00'+CAST(rn as varchar(10)) else CAST(rn as varchar(10)) end number
from numcte

Частичный вывод:

number    
002
003
004
005
006
007
008
009
10
11
12
13
14
15
16
17
18
19
20
1 голос
/ 16 декабря 2009

Вот крошечная функция, которая оставила значение pad с заданным символом заполнения Вы можете указать, сколько символов будет добавлено слева.

   Create    function fsPadLeft(@var varchar(200),@padChar char(1)='0',@len int)
      returns varchar(300)
    as
    Begin
      return replicate(@PadChar,@len-Len(@var))+@var
    end

Для звонка:

declare @value int; set @value =2
select dbo.fsPadLeft(@value,'0',2)
1 голос
/ 16 декабря 2009

Другой пример:

select 
case when teamId < 10 then '0' + cast(teamId as char(1)) 
else cast(teamId as char(2)) end      
as 'pretty id',
* from team
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...