使用格式将SQL中的数字转换为varchar

时间:2009-11-19 16:01:50

标签: sql tsql

在T-SQL中是否有办法使用自定义数字格式将TINYINT转换为VARCHAR? 例如,我的TINYINT值为3,我想将其转换为VARCH为03,因此它总是显示一个2位数字。

我在CONVERT函数中看不到这种能力。

8 个答案:

答案 0 :(得分:31)

RIGHT('00' + CONVERT(VARCHAR, MyNumber), 2)

请注意,这会使数字瘫痪>你可能想要考虑这种可能性。

答案 1 :(得分:4)

使用RIGHT功能...... e.g。

DECLARE @testnum TINYINT
SET @testnum = 3
PRINT RIGHT('00' + CONVERT(VARCHAR(2), @testnum), 2)

答案 2 :(得分:4)

你可以试试这个

DECLARE @Table TABLE(
        Val INT
)

INSERT INTO @Table SELECT 3
INSERT INTO @Table SELECT 30

DECLARE @NumberPrefix INT
SET @NumberPrefix = 2
SELECT  REPLICATE('0', @NumberPrefix - LEN(Val)) + CAST(Val AS VARCHAR(10))
FROM    @Table

答案 3 :(得分:2)

价值范围是多少?是0到10吗?如果是,请尝试:

SELECT REPLICATE('0',2-LEN(@t)) + CAST(@t AS VARCHAR)

处理0到9以及10到99。

现在,tinyint可以达到255的值。如果你想处理> 99到255,然后尝试这个解决方案:

declare @t  TINYINT
set @t =233
SELECT ISNULL(REPLICATE('0',2-LEN(@t)),'') + CAST(@t AS VARCHAR)

要理解解决方案,+左边的表达式会计算字符串前缀的零数。

如果值为3,则长度为1. 2 - 1为1. REPLICATE添加一个零。 如果值为10,则长度为2. 2 - 2为0. REPLICATE不添加任何内容。 在值为100的情况下,长度为-1,产生NULL。但是,处理空值并将其设置为空字符串。

现在,如果您决定因为tinyint最多可以包含255个并且您希望将格式设置为三个字符,只需将左侧表达式中的2-LEN更改为3-LEN即可。

答案 4 :(得分:1)

declare @t  tinyint
set @t =3
select right(replicate('0', 2) + cast(@t as varchar),2)

同上:关于数字的压缩效果> 99

如果您想要迎合1-255,那么您可以使用

select right(replicate('0', 2) + cast(@t as varchar),3)

但这会给你001,010,100等

答案 5 :(得分:1)

以下是最后一个答案之后的替代方案

declare @t tinyint,@v tinyint
set @t=23
set @v=232
Select replace(str(@t,4),' ','0'),replace(str(@t,5),' ','0')

这适用于任何数字,通过改变str()函数的长度,您可以规定需要多少前导零。当然,您的字符串长度始终是> =您的号码类型可以容纳的最大位数。

答案 6 :(得分:0)

Correción:3-LEN

declare @t  TINYINT 
set @t =233
SELECT ISNULL(REPLICATE('0',3-LEN(@t)),'') + CAST(@t AS VARCHAR) 

答案 7 :(得分:0)

与zipcode字段有同样的问题。有些人给我发了一个带拉链的excel文件,但是他们被格式化为#' s。不得不将它们转换为字符串,并且如果它们是<前导0到它们前面。 5 len ......

declare @int tinyint
set     @int = 25
declare @len tinyint
set     @len = 3

select right(replicate('0', @len) + cast(@int as varchar(255)), @len)

您只需更改@len即可获得所需内容。格式化后,你会得到......

001
002
...
010
011
...
255

理想情况下,你也是" varchar(@len)",但这会破坏SQL编译。不得不将一个实际的#扔进去而不是var。