Алгоритмы обрезания ведущих нулей из поля SQL?
Я просто столкнулся с интересной проблемой, связанной с попыткой обрезать ведущие нули из нечислового поля в SQL. (Так как он может содержать символы, он не может быть просто преобразован в число, а затем обратно.)
Вот что мы в итоге использовали:
SELECT REPLACE(LTRIM(REPLACE(fieldWithLeadingZeroes,'0',' ')),' ','0')
Он заменяет нули пробелами, левая их обрезает, а затем снова возвращает нули. Я думал, что это очень умный и интересный способ сделать это, хотя и не настолько читабельным, если вы никогда раньше не сталкивались с ним.
Есть ли более четкие способы сделать это? Есть ли более эффективные способы сделать это? Или любые другие способы сделать этот период? Я был заинтригован этой проблемой и был бы заинтересован увидеть любые способы обойти ее.
Ответы
Ответ 1
Найдите 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))
Ответ 2
Проверьте функцию TRIM
http://www.1keydata.com/sql/sql-trim.html
SELECT TRIM(LEADING '0' FROM fieldWithLeadingZeroes)