12

我刚刚遇到了一个有趣的问题,即尝试从 SQL 中的非数字字段中修剪前导零。(由于它可以包含字符,它不能只是转换为数字然后再返回。)

这就是我们最终使用的:

SELECT REPLACE(LTRIM(REPLACE(fieldWithLeadingZeroes,'0',' ')),' ','0')

它用空格替换零,然后修剪它,然后将零放回原处。我认为这是一种非常聪明且有趣的方法,尽管如果您以前从未遇到过它,它的可读性就不那么高了。

有没有更清晰的方法来做到这一点?有没有更有效的方法来做到这一点?或者任何其他方式来做这个时期?我对这个问题很感兴趣,并且有兴趣看到任何解决它的方法。

4

2 回答 2

11

查找第一个非零字符,子字符串结束(最大类型可以放 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))
于 2010-03-16T20:15:01.850 回答
0

查看 TRIM 函数 http://www.1keydata.com/sql/sql-trim.html

SELECT TRIM(LEADING '0' FROM fieldWithLeadingZeroes)
于 2010-03-16T20:00:22.457 回答