我正在編寫一個Oracle數據庫轉換腳本,將記錄(大約1,300)從舊的數據庫表移動到具有主表和多個子/參考/維護表的更標準化的設置。我正在處理的一種情況是(在舊設置中)幾個記錄包含[Status]
值,例如[Location]
字段下的RECYCLED
。我已經通過使用CASE語句,以獲得基本的就沒了下文:在Oracle PL/SQL的Case語句中檢查[Field]中的子字符串?
WHEN RTRIM(LTRIM(Vendor_Name)) in (
'EDAC') THEN 23 END as VendorID,
CASE
WHEN RTRIM(LTRIM(LOCATION)) in (
'Auctioned') THEN 3
WHEN RTRIM(LTRIM(LOCATION)) in (
'Recycled') THEN 5
WHEN RTRIM(LTRIM(LOCATION)) in (
'To Be Recycled') THEN 6
WHEN RTRIM(LTRIM(LOCATION)) in (
'DISPOSED OF') THEN 7
WHEN RTRIM(LTRIM(LOCATION)) in (
'To Be Auctioned') THEN 4
然而有額外的文本(和額外的文字變體),如'To be auctioned, SERVER ROOM'
有一些變化。我試圖弄清楚如何在我的病例陳述中做如CONTAINS
或LIKE
這樣的檢查,就像上面提到的CONTAINS ('%To be auctioned%') THEN 42
一樣。
任何人都可以提供一個簡單易懂的例子嗎?我已經閱讀了Oracle文檔,但是我並沒有完全理解索引部分,或者如何正確地使用正確的語法指定我的內容 - http://www.dba-oracle.com/t_sql_contains_clause.htm。
您可能會發現[INSTR(http://docs.oracle.com/cd/B19306_01 /server.102/b14200/functions068.htm)函數有幫助。 – GriffeyDog
你的示例中沒有PL/SQL –
小問題,但是trim()會和你的'rtrim(ltrim())'做同樣的事情:http://docs.oracle.com/cd/B28359_01/ olap.111/b28126/dml_functions_2126.htm#OLADM704 –