T-SQL 函数将 int 转换为带有 plus/minus 符号的 varchar
T-SQL function to convert int to varchar with plus/minus sign
虽然我一直被烦人的 SQL 操作所困扰,但我遇到了另一个 T-SQL 问题。
我必须将一些 Int 变量转换为带有 plus/minus 符号的零填充 varchar。
到目前为止,我已经尝试过 RIGHT() 和 CONVERT() 函数,
RIGHT('000000' + CONVERT(value1 AS VARCHAR(6)), 6)
但我想不出转换它们的最佳方法。
我想看的是:
If value1 = 305 then '+000305'
If value1 = -110 then '-000110'
有什么简单的函数可以实现吗?或者我应该为此创建自己的功能吗?
我知道这是个愚蠢的问题,但我当前的任务需要对存储过程(数据库端)执行大量此类无意义的任务,而不是 'application-side'。
谢谢。
当您以这种方式构建时,您想使用 CAST
而不是 CONVERT
。没有标准函数可以满足您的需求,但您可以创建这样的表达式来获得所需的内容:
LEFT(REPLACE(SIGN(value1),'1','+'),1) + RIGHT('000000' + CAST(ABS(value1) AS VARCHAR(6)), 6)
如果你想使用 CONVERT
它看起来像:
LEFT(REPLACE(SIGN(value1),'1','+'),1) + RIGHT('000000' + CONVERT(VARCHAR(6),ABS(value1)), 6)
只是为了好玩,这里有另一种方法:
LEFT(REPLACE(SIGN(value1),'1','+'),1) + REPLACE(STR(ABS(value1),5),' ','0')
可能这个可以使用 REPLACE 或 Replicate 函数以两种方式实现。
DECLARE @t TABLE (Num INT)
INSERT @t
SELECT 305
UNION SELECT -110
SELECT CASE WHEN Num < 0 THEN '-' ELSE '+' END +
replace(RIGHT('00000'+ CONVERT(VARCHAR,Num),8),'-','0') AS NUM
FROM @t
SELECT CASE WHEN Num < 0 THEN '-' ELSE '+' END +
RIGHT(Replicate('0',6) + CONVERT(VARCHAR,Abs(Num)), 6)
FROM @t
对于 SQL 2012 及更高版本,您可以使用 FORMAT()。
DECLARE @yourTable TABLE (nums INT);
INSERT INTO @yourTable VALUES (305),(-110);
SELECT RIGHT('+' + FORMAT(nums,'00000#'),7) AS formatted_nums
FROM @yourTable
结果:
formatted_nums
--------------
+000305
-000110
虽然我一直被烦人的 SQL 操作所困扰,但我遇到了另一个 T-SQL 问题。 我必须将一些 Int 变量转换为带有 plus/minus 符号的零填充 varchar。
到目前为止,我已经尝试过 RIGHT() 和 CONVERT() 函数,
RIGHT('000000' + CONVERT(value1 AS VARCHAR(6)), 6)
但我想不出转换它们的最佳方法。
我想看的是:
If value1 = 305 then '+000305'
If value1 = -110 then '-000110'
有什么简单的函数可以实现吗?或者我应该为此创建自己的功能吗? 我知道这是个愚蠢的问题,但我当前的任务需要对存储过程(数据库端)执行大量此类无意义的任务,而不是 'application-side'。
谢谢。
当您以这种方式构建时,您想使用 CAST
而不是 CONVERT
。没有标准函数可以满足您的需求,但您可以创建这样的表达式来获得所需的内容:
LEFT(REPLACE(SIGN(value1),'1','+'),1) + RIGHT('000000' + CAST(ABS(value1) AS VARCHAR(6)), 6)
如果你想使用 CONVERT
它看起来像:
LEFT(REPLACE(SIGN(value1),'1','+'),1) + RIGHT('000000' + CONVERT(VARCHAR(6),ABS(value1)), 6)
只是为了好玩,这里有另一种方法:
LEFT(REPLACE(SIGN(value1),'1','+'),1) + REPLACE(STR(ABS(value1),5),' ','0')
可能这个可以使用 REPLACE 或 Replicate 函数以两种方式实现。
DECLARE @t TABLE (Num INT)
INSERT @t
SELECT 305
UNION SELECT -110
SELECT CASE WHEN Num < 0 THEN '-' ELSE '+' END +
replace(RIGHT('00000'+ CONVERT(VARCHAR,Num),8),'-','0') AS NUM
FROM @t
SELECT CASE WHEN Num < 0 THEN '-' ELSE '+' END +
RIGHT(Replicate('0',6) + CONVERT(VARCHAR,Abs(Num)), 6)
FROM @t
对于 SQL 2012 及更高版本,您可以使用 FORMAT()。
DECLARE @yourTable TABLE (nums INT);
INSERT INTO @yourTable VALUES (305),(-110);
SELECT RIGHT('+' + FORMAT(nums,'00000#'),7) AS formatted_nums
FROM @yourTable
结果:
formatted_nums
--------------
+000305
-000110