我刚刚遇到一个有趣的问题,试图从 SQL 中的非数字字段中删除前导零。 (由于它可以包含字符,因此不能只将其转换为数字然后再转换回来。)
这就是我们最终使用的:
SELECT REPLACE(LTRIM(REPLACE(fieldWithLeadingZeroes,'0',' ')),' ','0')
它用空格替换零,向左修剪它,然后将零放回原位。我认为这是一种非常聪明且有趣的方法,尽管如果您以前从未遇到过它,那么可读性就不那么强了。
有没有更清晰的方法来做到这一点?有更有效的方法来做到这一点吗?或者还有其他方法可以做到这一点吗?我对这个问题很感兴趣,并且有兴趣了解解决该问题的任何方法。
最佳答案
查找第一个非零字符,到结尾的子串(最多可以容纳 20 亿个类型)
LTRIM 确实是可选的
DECLARE @MyVar varchar(8000)
SET @MyVar = '000foobar'
SELECT LTRIM(SUBSTRING(@MyVar, PATINDEX ('%[^0]%', @MyVar), 8000))
SET @MyVar = '000000 oh my lord'
SELECT LTRIM(SUBSTRING(@MyVar, PATINDEX ('%[^0]%', @MyVar), 8000))
关于sql-server - 从 SQL 字段中删除前导零的算法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2457603/