2009-01-05 45 views
0

問題是我需要忽略數字中的流浪字母:例如19A或B417如何在MS SQL中查找奇數門牌號碼?

+0

你是說你想從你的例子中返回19和417? – 2009-01-05 15:31:30

+0

我認爲這個問題是關於「奇怪」的門牌號碼,而不是像第1,3,5,7中那樣「奇怪」。 – 2009-01-05 15:32:48

+0

我認爲他想要SQL的等價物:grep'[13579] [^ 0-9] * $' – slim 2009-01-05 15:35:00

回答

1

這取決於您處理多少數據,但在SQL中這樣做可能會很慢。不是每個人都會同意我的看法,但我認爲所有數據處理應該在應用程序代碼中完成。

我只想把你想要的行,並在你正在處理的應用程序中進行過濾。

0

這裏要做的最簡單的事情就是創建一個CLR函數,它需要這個地址。在CLR函數中,您將獲取地址的第一部分(假設它是房屋號),應該用空格分隔。

然後,用空字符串替換任何非數字字符。

您應該有一個字符串表示一個整數,您可以傳遞給Int32類的Parse方法來產生一個整數,然後您可以檢查它是否是奇數。

我推薦使用CLR函數(假設您使用的是SQL Server 2005及更高版本,並且可以設置數據庫的兼容級別),因爲在.NET中執行字符串操作比在T-SQL中更容易。

0

假設[聯繫地址]是與它的地址欄...

Select Case Cast(Substring(Reverse(Address), PatIndex('%[0-9]%', 
      Reverse(Address)), 1) as Integer) % 2 
     When 0 Then 'Even' 
     When 1 Then 'Odd' End 
    From Table 
0

我已經通過這個練習之前。最好的方法是在表格中添加一列或者添加一個輔助的可連接表格,以便爲此目的存儲推斷的數值。然後使用迭代查詢重複設置列,直到獲得足夠的準確性和覆蓋率。你最終會遇到像「第一,第三,」「451a」,「1200 South 19th Blvd East」之類的東西,甚至更糟。

然後過濾新的和編輯過的記錄。與往常一樣,應該避免UDF由於緩慢和(相對)較少的可調試性而被避免。