2012-12-27 65 views
2

我想要做的是確定(使用Teradata SQL)如果一個人的郵政編碼意外地放在了地址行上。我看過各種論壇,我找不到任何類似的問題。如何搜索字符串列中的五位數字?

最後,我希望寫類似:

Where address_line_1 like '%[0-9][0-9][0-9][0-9][0-9]%' 

任何想法?

目標數據庫的Teradata 13.x

+0

您正在使用哪個版本的Teradata? –

回答

0

找到所有匹配這個表達式[^0-9][0-9][0-9][0-9][0-9][0-9][^0-9]

這些條目作爲該會發現一些文字,正是5個位數號碼,假設這是一個郵政編碼的定義。

+0

直到Teradata 14 Teradata才支持正則表達式表達式.OP沒有指出他們正在使用哪個版本的Teradata。 –

+0

難道你不知道它,版本13. –

+1

@ape如果有正則表達式的支持,那麼這個正則表達式只會返回那些在5位數字串的極端會存在非數值的條目。例如,它將匹配'p12345q',但會失敗'12345'。也許你的意思是寫''[^ 0-9]?[0-9] {5} [^ 0-9]?' –

5

如果要檢查整個列,看它是否只包含一個郵政編碼,你可以嘗試這樣的事:

where address_line_1 between '00000' and '99999' 

但是,如果你想搜索整個字符串的任何出現的無論如何,這將不是一個好的測試。例如,下面將是完全有效的郵寄地址:

28305 Southwest Main Street 

否則有效性檢查數據已被加載之後是困難的;這樣的任務應該在加載過程中真正執行。

+0

必須同意,在加載之前使用諸如PostalSoft(現在屬於IBM數據質量堆棧的一部分,如果我正確記得)清理地址之前的工具將是更合適的任務。否則,你正面臨着「垃圾進出垃圾」的困境。 –