T-SQL格式整数为2位字符串

时间:2009-12-16 13:34:40

标签: tsql format casting

我无法在T-SQL中找到一种简单的方法。

我有一个列(SortExport_CSV),它返回一个整数'2'到90。 如果存储的数字是一个数字,我需要它转换为以0开头的2位数字符串。 我曾尝试过使用CAST,但我仍然不知道如何以首选格式显示样式(0#)

当然很容易在前端(SSRS,MSAccess,Excel等)执行此操作,但在这种情况下,我没有前端,必须为原始数据集提供已经格式化的2位数字符串。

17 个答案:

答案 0 :(得分:52)

select right ('00'+ltrim(str( <number> )),2 )

答案 1 :(得分:18)

SELECT RIGHT('0' + CAST(sortexport_csv AS VARCHAR), 2)
FROM your_table

答案 2 :(得分:18)

您可以使用T-SQL的内置格式功能:

declare @number int  = 1
select format (@number, '0#')

答案 3 :(得分:7)

你们都做了太多工作:

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

答案 4 :(得分:5)

将值转换为字符串,在其前面添加一个零(以便它是两个或树字符),并获取最后一个字符:

right('0'+convert(varchar(2),Sort_Export_CSV),2)

答案 5 :(得分:3)

DECLARE @Number int = 1;
SELECT RIGHT('0'+ CONVERT(VARCHAR, @Number), 2)
--OR
SELECT RIGHT(CONVERT(VARCHAR, 100 + @Number), 2)
GO

答案 6 :(得分:2)

你可以试试这个

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

这应该有帮助

答案 7 :(得分:1)

另一个例子:

select 
case when teamId < 10 then '0' + cast(teamId as char(1)) 
else cast(teamId as char(2)) end      
as 'pretty id',
* from team

答案 8 :(得分:1)

这是一个微小的函数,它使用给定的填充char留下了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)

答案 9 :(得分:1)

试试这个

- 生成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

答案 10 :(得分:0)

SELECT
replace(str(month(DATEADD(month, -1, '2012-02-29')), 2),' ' , '0')

答案 11 :(得分:0)

最简单的方法是:

declare
    @len int = 10,
    @number int = 122222,
    @prefix char = '0'

select replicate(@prefix, @len - len(@number)) + CAST(@number AS VARCHAR)

结果:

0000122222

答案 12 :(得分:0)

DECLARE @Number int = 1;
SELECT RIGHT('0'+ CONVERT(VARCHAR, @Number), 2)
--OR
SELECT RIGHT(CONVERT(VARCHAR, 100 + @Number), 2)
GO

答案 13 :(得分:0)

通过添加0将一位数字转换为两位数字的示例:

DECLARE @int INT = 9 
        SELECT CASE WHEN @int < 10
                    THEN FORMAT(CAST(@int AS INT),'0#')
               ELSE 
                   FORMAT(CAST(@int AS INT),'0')
               END

答案 14 :(得分:0)

您可以创建如下函数:

CREATE FUNCTION [dbo].[f_convert_int_to_2_digits](@input int)
RETURNS varchar(10)
AS
BEGIN
    --return value
    DECLARE @return varchar(10)

    if @input < 10
    begin
    set @return = '0' + convert(varchar(1), @valor)
end
    else
    begin
        set @return = convert(varchar(10), @input)
    end

    -- return result
    RETURN @return

END

然后到处使用:
select [dbo].[f_convert_int_to_2_digits](<some int>)

答案 15 :(得分:0)

right('0' + convert(varchar(2), @number),2)

答案 16 :(得分:0)

你去吧

select RIGHT(REPLICATE('0', 2) + CAST(2 AS VARCHAR(2)), 2)

应该返回02