2011-01-30 71 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中的第二个参数。