2010-03-16 2 views
12

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

Это то, что мы в конечном итоге с помощью:

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

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

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

+1

умный, если поле никогда не содержит пробела, начинающегося с – John

+0

@John - true. В этом случае это не так. Это поле идентификатора, которое может содержать буквы или цифры. – froadie

+0

Хммммм Я надеялся получить больше ответов. Нет ли других способов сделать это? – froadie

ответ

11

Найти 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

Ничего себе. Ницца. Спасибо ... Я никогда не мог придумать это сам, я все еще боюсь шаблонов и регулярных выражений. :) – froadie

+0

PATINDEX/LIKE довольно прост по сравнению с RegEx ... – gbn

0

Заканчивать функцию TRIM http://www.1keydata.com/sql/sql-trim.html

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

Прохладный. Однако это не работает, я получаю синтаксическую ошибку. Это новая функция SQL ...? Я использую SQL Server 2005 – froadie

+0

MS-SQL не поддерживает SQL99 Syntax для этого; должен работать для других типов серверов sql, хотя – John

+0

Я также пробовал это с SQL Server, и это не сработало. Он поддерживается в другой СУБД, которую я только что попробовал. –

Смежные вопросы