Как работает этот SQL-запрос? - PullRequest
1 голос
/ 30 января 2011
SELECT REPLACE(TRANSLATE(LTRIM(RTRIM('!! ATHEN !!','!'), '!'), 'AN', '**'),'*','TROUBLE') FROM DUAL;

Меня смущает вопрос, как этот запрос работает?

1 Ответ

8 голосов
/ 30 января 2011
SELECT 
  REPLACE(
    TRANSLATE(
      LTRIM(
        RTRIM('!! ATHEN !!','!')
        , '!')
      , 'AN'
      , '**')
    ,'*'
    ,'TROUBLE')
FROM DUAL;

Это не работает на MySQL.

Будет возвращено одно постоянное значение.DUAL - это системная таблица с одной записью.Это позволяет вам выбрать постоянное значение, когда у вас нет таблицы для запроса, потому что двойное всегда есть.FROM DUAL может быть опущен в MySQL, он фактически добавлен в MySQL для большей совместимости с Oracle.

Что должен делать этот запрос:

  • Он принимает текст '!!АФИНА !! '
  • Это уравновешивает'! 'на обоих концах (ltrim и rtrim)
  • Он 'переводит' A и N в * и *.
  • Он заменяет каждый * на 'TROUBLE'

Так что я ожидаю, что результат будет что-то вроде 'TROUBLETHETROUBLE'.

То есть, когда вы запускаете его в Oracle.MySQL не примет второй параметр в RTRIM, как указала Nanne в комментариях.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...