2017-07-18 32 views
2

我需要清理一個字符列和我使用REGEXP_REPLACE功能的Teradata 14錯誤:字符串中包含不能翻譯的字符 - TERADATA(用於REGEXP_REPLACE操作)

的同一段代碼共事過一段其他數據源(具有相同的LATIN編碼)。

使用顯示錶中的數據定義給了我下面的數據格式:

CREATE SET TABLE pp_oap_cj_t.dc_loss_fdr_kn ,NO FALLBACK , 
    NO BEFORE JOURNAL, 
    NO AFTER JOURNAL, 
    CHECKSUM = DEFAULT, 
    DEFAULT MERGEBLOCKRATIO 
(PARENT_ID DECIMAL(38,0), 
FS_MRCH_NM VARCHAR(25) CHARACTER SET LATIN NOT CASESPECIFIC 
) PRIMARY INDEX (PARENT_ID); 

我執行的查詢是如下:

CREATE TABLE pp_oap_pb_piyush_t.CHECKMERCHANT1 AS (
SELECT 
FS_MRCH_NM, 
REGEXP_REPLACE(trim(Upper(trim(REGEXP_REPLACE((FS_MRCH_NM) , '[^a-z]',' ',1,0,'i')))), '[[:space:]]+',' ',1,0,'i') as cleaned_merchant 
FROM pp_oap_pb_piyush_t.CHECKMERCHANT) 
    WITH DATA PRIMARY INDEX (FS_MRCH_NM); 

錯誤

CREATE TABLE Failed. 6706: The string contains an untranslatable character. 

我需要快速扭轉這個瓶頸。

幫助真的很感激! 謝謝!

+0

您能在代碼塊中格式化您的代碼嗎?很難解析你的查詢。 – nico

+0

格式化了一下。希望現在很清楚。謝謝 –

+0

Checkmerchant表上設置的字符是什麼?你正在顯示不同的表格。 – Andrew

回答

2

下面的REGEXP_REPLACE將字符集拉丁語轉換爲Unicode。您已將變量定義爲字符集拉丁文。當數據中有某些內容不能從拉丁文轉換爲Unicode時,您會看到錯誤。最好的辦法是修復你的DDL將字符集設置爲Unicode而不是拉丁文。類似於代碼中的TRANSLATE(FS_MRCH_NM使用LATIN_TO_UNICODE WITH ERROR)而不是FS_MRCH_NM應該可以工作。問題在於,當你有不可翻譯的字符時,它會導致空值。

+0

嗨Kiran, 真的很感謝幫助! 我使用了建議的解決方案,但仍拋出相同的錯誤。可能的原因是什麼? 謝謝! –

+0

嗨Kiran, 我應該改正我的自我。有效!只有一件事,它應該是LATIN_TO_UNICODE。 再次,真的很感謝幫助! 謝謝你!!!!!! –

+0

嗨Piyush,在答案中更改了LATIN_TO_UNICODE。如果您覺得答案對您有幫助,請接受它作爲解決方案。 – Kiran