不再適用的漢字不是問題:
這可能是,你必須使用TRANSTLATE()函數的情況:
SELECT TRANSLATE({colA}
USING {KANJISJIS_TO_UNICODE|KANJI1_SBC_TO_UNICODE|KANJI1_KANJISJIS_TO_UNICODE
|KANJI1_KanjiEUC_TO_UNICODE|KANJI1_KanjiEBCDIC_TO_UNICODE}
);
不支持的字符: 如果您在Teradata 14上可以使用正則表達式函數之一來替換超出LATIN或UNICODE範圍的數據,並使用空字符串:
SELECT REGEXP_REPLACE({colA}, '[^[print]]', '') FROM {MyDB}.{MyTable};
您還可以在您的處置中的Teradata 14還可以用來剔除掉有問題的數據CHR()函數:
SELECT CASE WHEN POSITION(CHR(26) IN {ColA}) = 0
THEN {ColA}
ELSE SUBSTRING({ColA} FROM 1 FOR
(POSITION(CHR(26) IN {ColA}) - 1))
|| '' || SUBSTRING({ColA} FROM
(POSITION(CHR(26) IN {ColA}) + 1))
END AS Test_
FROM {MyDB}.{MyTable};
在它工作的單個事件上面的例子「壞」數據。如果您在單個字符串中重複出現,則可能需要與OREPLACE()
結合使用CHR()
進行清理。
最後,您可以嘗試在UNIX中準備文件(如果這是您的源環境),使用類似AWK和gensub()
的方法去除不良數據。
事實證明,漢字字符不是問題。他們加載到一個Unicode列就好了。這是其他人物的存在讓我覺得漢字人物應該受到指責。此外,我的問題還提到了其他不支持的字符。我編輯了我的問題,以便它的前提不再解釋漢字字符。 – oscilatingcretin
感謝您在這裏的努力。該正則表達式肯定會除去不可打印的字符,例如escapes('regexp_replace('1←2','[^ [:print:]]','',1,0,'i''),但它不會刪除Unicode替換字符'15712189',但我找到了一個解決方案,Oracle數據庫是'AL32UTF8'。在我的Oracle SQL中,我將所有內容都轉換爲'UTF8',將所有無效字符轉換爲'15712189',然後刪除所有這些字符從字符串和MLOAD是能夠完美地處理它。 – oscilatingcretin