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