2011-01-30 67 views
1
SELECT REPLACE(TRANSLATE(LTRIM(RTRIM('!! ATHEN !!','!'), '!'), 'AN', '**'),'*','TROUBLE') FROM DUAL; 

我很疑惑這個查詢如何工作?這個SQL查詢如何工作?

+2

你認爲它有什麼作用? – 2011-01-30 10:39:35

+1

我不知道這就是爲什麼我問這個問題 – 2011-01-30 10:40:21

回答

8
SELECT 
    REPLACE(
    TRANSLATE(
     LTRIM(
     RTRIM('!! ATHEN !!','!') 
     , '!') 
     , 'AN' 
     , '**') 
    ,'*' 
    ,'TROUBLE') 
FROM DUAL; 

它不適用於MySQL。

它會返回一個單一的常量值。 DUAL是帶有一條記錄的系統表。它允許你選擇一個常量值,當你實際上沒有一個表來查詢時,因爲dual始終存在。 FROM DUAL可以在MySQL中省略,它實際上被添加到MySQL中以更加兼容Oracle。

此查詢應該做什麼:

  • 它以文本「! ATHEN !!'
  • 它修剪'!' (ltrim和rtrim)
  • 它將A和N翻譯爲**
  • 它取代了每個*有「麻煩」

所以我期望的輸出是這樣的「TROUBLETHETROUBLE」。

也就是說,當你在Oracle上運行它時。正如Nanne在評論中指出的,MySQL不會接受RTRIM中的第二個參數。