sql-server - 从 SQL 字段中删除前导零的算法?

标签 sql-server trim

我刚刚遇到一个有趣的问题,试图从 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/

相关文章:

sql-server - 使用 Azure SQL Server 在其他表中插入

java - Groovy 冗余修剪() 调用

sql-server - 在 T-SQL 中将percentile_cont 与 "group by"语句结合使用

sql-server - 在 SQL Server 中添加两个列值来填充第三列,这可以在没有触发器/存储过程的情况下完成吗?

python - 2D 或 3D 中的 Numpy trim_zeros

Javascript trim 双斜杠

java - 在 Java 中,如何有效地从字节数组的开头和结尾修剪 0

javascript - 最多允许 3 个连续空白字符

c# - 优化 NHibernate 生成的 SQL

sql - 替代使用 ROW_NUMBER 以获得更好的性能