这个 SQL 查询是如何工作的?

发布于 2024-10-15 03:11:42 字数 157 浏览 1 评论 0原文

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

我对上面的问题感到困惑,这个查询是如何工作的?

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

I'm confused about above question how this query works ?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

娇纵 2024-10-22 03:11:42
SELECT 
  REPLACE(
    TRANSLATE(
      LTRIM(
        RTRIM('!! ATHEN !!','!')
        , '!')
      , 'AN'
      , '**')
    ,'*'
    ,'TROUBLE')
FROM DUAL;

它不适用于 MySQL。

它将返回一个常量值。 DUAL 是一张只有一条记录的系统表。当您实际上没有可供查询的表时,它允许您选择一个常量值,因为 Dual 始终存在。从 23c 开始,FROM DUAL 在 MySQL 和 Oracle 中是可选的。

这个查询应该做什么:

  • 它需要文本“!!”雅典!!”
  • 它修剪了“!”两端(ltrim 和 rtrim)
  • 它将 A 和 N '翻译' 为 **
  • 它将每个 * 替换为“TROUBLE”,

因此我希望输出类似于“TROUBLETHETROUBLE”。

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

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

It doesn't work on MySQL.

It would return a single constant value. DUAL is a system table with one record. It allows you to select a constant value when you don't actually have a table to query from, because dual is always there. FROM DUAL is optional in MySQL and in Oracle from 23c on.

What this query should do:

  • It takes the text '!! ATHEN !!'
  • It trims the '!' on both ends (ltrim and rtrim)
  • It 'translates' A and N to * and *.
  • It replaces each * with 'TROUBLE'

So I'd expect the output to be something like ' TROUBLETHETROUBLE '.

That is, when you run it on Oracle. MySQL won't accept the second parameter in RTRIM as Nanne pointed out in the comments.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文