Алгоритмы обрезать ведущие нули из поля SQL? - PullRequest
12 голосов
/ 16 марта 2010

Я только что натолкнулся на интересную проблему попытки обрезать начальные нули из нечислового поля в SQL. (Поскольку он может содержать символы, он не может быть просто преобразован в число, а затем обратно.)

Вот что мы в итоге использовали:

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

Он заменяет нули пробелами, обрезает их слева, а затем возвращает нули обратно. Я подумал, что это очень умный и интересный способ сделать это, хотя и не настолько читаемый, если вы никогда не сталкивались с этим раньше.

Есть ли более ясные способы сделать это? Есть ли более эффективные способы сделать это? Или есть другие способы сделать этот период? Я был заинтригован этой проблемой, и мне было бы интересно узнать, как ее обойти.

Ответы [ 2 ]

11 голосов
/ 16 марта 2010

Найти 1-й ненулевой символ, подстроку в конце (можно поставить 2 миллиарда для макс. Типов)

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))
0 голосов
/ 16 марта 2010

Проверьте функцию TRIM http://www.1keydata.com/sql/sql-trim.html

SELECT TRIM(LEADING '0' FROM fieldWithLeadingZeroes)
...