这个SQL查询如何工作?

mr_*_*air 1 sql oracle

SELECT REPLACE(TRANSLATE(LTRIM(RTRIM('!! ATHEN !!','!'), '!'), 'AN', '**'),'*','TROUBLE') FROM DUAL;
Run Code Online (Sandbox Code Playgroud)

我对以上问题如何查询这个问题感到困惑?

Gol*_*rol 8

SELECT 
  REPLACE(
    TRANSLATE(
      LTRIM(
        RTRIM('!! ATHEN !!','!')
        , '!')
      , 'AN'
      , '**')
    ,'*'
    ,'TROUBLE')
FROM DUAL;
Run Code Online (Sandbox Code Playgroud)

它不适用于MySQL.

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

这个查询应该做什么:

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

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

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

  • 输出确实是"'TROUBLETHETROUBLE'". (2认同)