2010-03-16 83 views
12

我剛剛遇到了一個有趣的問題,試圖從SQL中的非數字字段中刪除前導零。 (因爲它可以包含的字符,它不能只是被轉換成一個數字,然後回來。)從SQL字段中刪除前導零的算法?

這是我們最後使用:

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

它取代了零用空格,左裝飾然後再把零點放回去。我認爲這是一個非常聰明和有趣的方式,但如果你以前從未遇到過這種方法,那麼它就不那麼可讀了。

有沒有更清晰的方法來做到這一點?任何更有效的方法來做到這一點?或者其他方式來做這個時期?我對這個問題很感興趣,並且很想看看解決它的任何方法。

+1

聰明,如果該字段從不包含空格開始 – John 2010-03-16 20:01:06

+0

@約翰 - 真。在這種情況下它沒有。這是一個可以包含字母或數字的ID字段。 – froadie 2010-03-16 20:04:46

+0

嗯,我希望能有更多的答案。真的沒有其他方法可以做到這一點嗎? – froadie 2010-03-19 15:08:54

回答

11

找到第一個非零字符,子串結束(可放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 2010-03-16 20:19:20

+0

與RegEx相比,PATINDEX/LIKE相當簡單... – gbn 2010-03-16 20:20:15

0

退房TRIM功能 http://www.1keydata.com/sql/sql-trim.html

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

很酷。它似乎沒有工作,但 - 我得到一個語法錯誤。這是SQL的一個新功能...?我正在使用SQL Server 2005 – froadie 2010-03-16 20:06:27

+0

MS-SQL不支持此語法的SQL99語法;應該爲其他sql服務器類型工作,雖然 – John 2010-03-16 20:11:36

+0

我也嘗試過與SQL Server,它沒有工作。不過,它在我剛剛嘗試過的另一個DBMS中得到了支持。 – 2010-03-16 20:12:59