Подтвердить что ты не робот

Алгоритмы обрезания ведущих нулей из поля SQL?

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

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

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

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

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

4b9b3361

Ответ 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))