2015-04-27 26 views
1

我正在編寫一個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'有一些變化。我試圖弄清楚如何在我的病例陳述中做如CONTAINSLIKE這樣的檢查,就像上面提到的CONTAINS ('%To be auctioned%') THEN 42一樣。

任何人都可以提供一個簡單易懂的例子嗎?我已經閱讀了Oracle文檔,但是我並沒有完全理解索引部分,或者如何正確地使用正確的語法指定我的內容 - http://www.dba-oracle.com/t_sql_contains_clause.htm

+0

您可能會發現[INSTR(http://docs.oracle.com/cd/B19306_01 /server.102/b14200/functions068.htm)函數有幫助。 – GriffeyDog

+1

你的示例中沒有PL/SQL –

+1

小問題,但是trim()會和你的'rtrim(ltrim())'做同樣的事情:http://docs.oracle.com/cd/B28359_01/ olap.111/b28126/dml_functions_2126.htm#OLADM704 –

回答

2

嘗試:

when location like '%To be auctioned%' then 4 
0

你必須考慮大小寫,有時重音符號。 é任何人?

WHEN instr(UPPER(LOCATION)),'AUCTION') > 0 THEN 4 

要考慮你需要使用口音文字取代改變é到e,然後比較