在SQL中使用格式将数字转换为varchar
在T-SQL中有没有一种方法可以将TINYINT转换为具有自定义数字格式的VARCHAR? 例如,我的TINYINT的值为3,我想将其转换为03的VARCH,以便它始终显示2位数字 我在CONVERT函数中没有看到这个功能在SQL中使用格式将数字转换为varchar,sql,tsql,Sql,Tsql,在T-SQL中有没有一种方法可以将TINYINT转换为具有自定义数字格式的VARCHAR? 例如,我的TINYINT的值为3,我想将其转换为03的VARCH,以便它始终显示2位数字 我在CONVERT函数中没有看到这个功能 RIGHT('00' + CONVERT(VARCHAR, MyNumber), 2) 请注意,这将削弱大于99的数字。你可能想考虑一下这种可能性 declare @t tinyint set @t =3 select right(replicate('0', 2) +
RIGHT('00' + CONVERT(VARCHAR, MyNumber), 2)
请注意,这将削弱大于99的数字。你可能想考虑一下这种可能性
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等使用正确的功能。。。
e、 g
你可以试试这个
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
数值范围是多少?是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。复制加一个零。
如果值为10,则长度为2。2-2等于0。复制不会增加任何东西。
在值100的情况下,长度为-1,这将产生空值。但是,将处理空值并将其设置为空字符串
现在,如果您决定,因为tinyint最多可以包含255个字符,并且希望格式设置为三个字符,只需将左侧表达式中的2-LEN更改为3-LEN,就可以设置了。Correción:3-LEN
declare @t TINYINT
set @t =233
SELECT ISNULL(REPLICATE('0',3-LEN(@t)),'') + CAST(@t AS VARCHAR)
下面是最后一个答案之后的另一个选择
declare @t tinyint,@v tinyint
set @t=23
set @v=232
Select replace(str(@t,4),' ','0'),replace(str(@t,5),' ','0')
这将适用于任何数字,通过改变
str()
函数的长度,您可以规定需要多少前导零。当然,如果字符串长度始终>=您的数字类型可以容纳的最大位数。在zipcode字段中也存在同样的问题。有些人给我发了一个带拉链的excel文件,但它们的格式是#。必须将它们转换为字符串,如果<5 len,则必须在0前面加前缀
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编译。必须将实际的#而不是变量放入其中。欢迎使用堆栈溢出。这个问题最初是在近3年前得到回答的。当你为一个旧问题添加一个新答案时,最好详细解释一下你的答案的新颖之处,或者解释为什么原始答案不准确(或者,更可能的是,由于产品发生了变化,不再准确)。而且,我也不清楚什么是“纠正”;你也应该说清楚。
001
002
...
010
011
...
255