2017-05-08 82 views
0

有時候我在我的數據庫中得到Ÿ(十六進制C5B8:2個字節,1個字符),並且我有一個處理多個數據的腳本不會讀取這些數據,因爲它不知道如何處理它,所以它會停止整個過程,我必須進入我的日誌並查看錯誤的位置,以便我可以重新啓動整個過程。是否有可能只從列中獲取非字母,英文字母和非數字DB2

我想執行一個查詢,只給我不是英文字母的字符,以便我可以查看它們是否應該更改。

我試圖只查找UTF8字符,但Ÿ是UTF8字符,所以我需要去另一個aproach。

詞語含有比其他:

ABCDEFGHIJKLMNOPQRSTU-VWXYZ

和數字

0-1-2-3-4-5-6-7-8- 9

不包括字母數字(如有人寫入ES這樣的地址)

h3ll0

我thinkg是這樣的:

SELECT * FROM myTable WHERE myCol != (/^[A-Za-z]+$/) 

類似的東西,我只能得到具有不屬於字符列英文字母或數字0-9

+0

嘗試'WHERE myCol NOT REGEXP'^ [a-z0-9] * $''或'WHERE myCol NOT REGEXP BINARY'^ [a-zA-Z0-9] * $''。 –

+0

@WiktorStribiżew**令牌REGEXP無效。有效令牌:如同之間。** – learningbyexample

+0

@learningbyexample,你的問題被標記爲'mysql',所以我們假設你使用的是MySQL,而REGEXP是MySQL中的有效謂詞。如果您使用的是不同的SQL數據庫,請適當編輯您問題的標籤。不同的SQL數據庫使用正則表達式的語法不同。 –

回答

0

我不知道我是否正確理解了你。基本上你想要查找所有包含不是英文字母的字符的列?如果是這樣,這可能工作:

SELECT * FROM `myTable` WHERE `myCol` NOT REGEXP '[A-Za-z0-9]' 

編輯:這個答案舊標籤上寫入到這個問題,這是「MySQL的」,你將其更改爲DB2。我試圖修改它爲DB2 11,但它是最好的猜測:

SELECT * FROM `myTable` WHERE `myCol` NOT REGEXP_LIKE '[A-Za-z0-9]' 
+0

**令牌'無效。有效令牌:(+ - ?:日INF INF NAN NOT RID ROW RRN CASE CAST CHAR日期日** – learningbyexample

+0

抱歉只看我的數據庫,它是DB2 – learningbyexample

+0

@learningbyexample請用雙引號而不是單引號檢查,它可能不喜歡錶和列名稱周圍的迴歸標記 – Xyzk

0

退房的

翻譯

功能 - 見documentation

翻譯所有正常字符和數字爲空字符串 - 例如:

select translate(mycol, '', 'ABCDEFGabcdefghi1234567890') 
    from mytable 

這不是完整的解決方案,但你應該明白。這在DB2 LUW中可用,並可用於i系列。

+0

**函數TRANSLATE的參數02無效** – learningbyexample

+0

所以檢查文檔 - 在LUW參數3和2反之亦然,但我從文檔中採取了這一點 - 我沒有我的系列測試它.... – MichaelTiefenbacher