这个SQL查询如何工作?

时间:2011-01-30 10:36:09

标签: sql oracle

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

我对上述问题如何运作感到困惑?

1 个答案:

答案 0 :(得分:8)

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

它不适用于MySQL。

它会返回一个常量值。 DUAL是一个包含一条记录的系统表。当你实际上没有要查询的表时,它允许你选择一个常量值,因为dual总是在那里。在MySQL中可以省略FROM DUAL,它实际上被添加到MySQL以便与Oracle更兼容。

此查询应执行的操作:

  • 需要文字'!! ATHEN !!'
  • 它修剪'!'在两端(ltrim和rtrim)
  • 它将'A和N'翻译为**
  • 它将每个*替换为'TROUBLE'

所以我希望输出类似'TROUBLETHETROUBLE'。

也就是说,当你在Oracle上运行它时。正如Nanne在评论中指出的那样,MySQL不会接受RTRIM中的第二个参数。