SQL Server 2008中如何反转整数/非整数值?含特定反转需求
在SQL Server 2008中实现整数与非整数值的反转需求
一、先解决你的特定整数反转需求(50326518 → 18653250)
从你的例子来看,你需要的不是字符级的逐位反转,而是将字符串按两位一组从后往前拼接——原数转字符串后拆分为50、32、65、18,反转分组顺序后得到18653250。
在SQL Server 2008中可以用循环实现这个逻辑:
DECLARE @input INT = 50326518; DECLARE @strInput VARCHAR(20) = CAST(@input AS VARCHAR(20)); DECLARE @result VARCHAR(20) = ''; -- 从字符串末尾开始,每次取两位向前拼接 WHILE LEN(@strInput) > 0 BEGIN -- 取最后两位(长度不足两位时取全部) SET @result = @result + RIGHT(@strInput, 2); -- 去掉已处理的最后两位 SET @strInput = LEFT(@strInput, LEN(@strInput) - 2); END -- 按需转换回整数 SELECT CAST(@result AS INT) AS ReversedResult;
执行后会得到你需要的18653250。
二、常规数值逐位反转(比如50326518 → 81562305)
如果之后需要普通的逐位反转(也就是REVERSE函数的默认行为),可以直接用REVERSE,注意转换时自动去除前导零即可:
DECLARE @input INT = 50326518; -- 转字符串反转后再转回整数,自动剔除前导零 SELECT CAST(REVERSE(CAST(@input AS VARCHAR(20))) AS INT) AS NormalReversedResult;
这个会返回81562305,也就是常规的数值反转结果。
三、非整数值的反转(比如F4180000)
针对F4180000这类字符串形式的非整数值,分两种场景处理:
1. 字符级逐位反转(F4180000 → 0000814F)
直接使用REVERSE函数就能实现:
DECLARE @input VARCHAR(20) = 'F4180000'; SELECT REVERSE(@input) AS CharReversedResult;
返回结果为0000814F。
2. 按两位分组反转(F4180000 → 000018F4)
如果需要和整数案例一样按两位分组反转,复用之前的循环逻辑即可:
DECLARE @input VARCHAR(20) = 'F4180000'; DECLARE @result VARCHAR(20) = ''; WHILE LEN(@input) > 0 BEGIN SET @result = @result + RIGHT(@input, 2); SET @input = LEFT(@input, LEN(@input) - 2); END SELECT @result AS GroupReversedResult;
执行后得到000018F4。
如果是带小数点的数值(比如123.456),需要拆分整数和小数部分分别反转再拼接:
DECLARE @input VARCHAR(20) = '123.456'; DECLARE @leftPart VARCHAR(20) = LEFT(@input, CHARINDEX('.', @input) - 1); DECLARE @rightPart VARCHAR(20) = RIGHT(@input, LEN(@input) - CHARINDEX('.', @input)); SELECT REVERSE(@leftPart) + '.' + REVERSE(@rightPart) AS DecimalReversedResult;
返回321.654。
四、SQL Server 2008的注意事项
因为SQL Server 2008不支持STRING_SPLIT、CONCAT_WS等高版本函数,所以只能用循环、LEFT/RIGHT/LEN这些基础函数实现复杂逻辑。另外处理整数时要注意溢出问题:如果反转后的数值超过INT类型范围(-2147483648到2147483647),要改用BIGINT类型存储,避免报错。
内容的提问来源于stack exchange,提问作者user3997016
相关产品推荐
相关产品推荐

