在T-SQL中是否有办法使用自定义数字格式将TINYINT转换为VARCHAR? 例如,我的TINYINT值为3,我想将其转换为VARCH为03,因此它总是显示一个2位数字。
我在CONVERT函数中看不到这种能力。
答案 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。