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