Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在SQL中使用格式将数字转换为varchar_Sql_Tsql - Fatal编程技术网

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

在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) +

在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) + 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