SQL Server:如何通过删除零来返回舍入值

Tay*_*min 0 sql sql-server sql-server-2008 sql-server-2008-r2 sql-server-2012

我有第01列中的值,我希望将其转换为第02列中的值,从结尾删除所有零.有没有办法在SQL服务器中执行此操作?

Column 01    Column 02 
20100000   201
29050000   2905
Run Code Online (Sandbox Code Playgroud)

谢谢你的期待.

Luk*_*zda 7

对于正整数,只能使用:

CREATE TABLE #tab(col1 INT);
INSERT INTO #tab(col1) VALUES (20100000),(29050000);

SELECT col1, REVERSE(REVERSE(col1) + 0) + 0 AS trimmed
FROM #tab;
Run Code Online (Sandbox Code Playgroud)

LiveDemo

输出:

??????????????????????
?   Col1   ? trimmed ?
??????????????????????
? 20100000 ?     201 ?
? 29050000 ?    2905 ?
??????????????????????
Run Code Online (Sandbox Code Playgroud)

这个怎么运作:

  1. 反向数字 - >字符串
  2. 添加0- >隐式转换为INT.你可以CAST/CONVERT用来明确!
  3. 再次反转 - >字符串
  4. 添加0- >强制转换为INT

20100000- > "0000102"- > 102- > "201"- >201

附录

添加了对负整数的支持:

SELECT col1, SIGN(col1) * REVERSE(REVERSE(ABS(col1)) + 0) AS trimmed
FROM #tab;
Run Code Online (Sandbox Code Playgroud)

LiveDemo2