gpt4 book ai didi

mysql - 条件 SELECT 中的重复连接

转载 作者:行者123 更新时间:2023-11-29 00:26:11 24 4
gpt4 key购买 nike

客户端的标签由以下部分组成:

  • 他的头衔(小姐/先生/夫人/女士),
  • 他的名字,
  • 他的姓。

它的最大大小必须是 20 个字符:

  • 如果标签大小大于 20,则名字缩减为带点的首字母(Nancy 变为 N.),
  • 如果标签大小仍然大于 20,则整个标签被截断为 20 个字符。

我这样做了:

SELECT
UPPER(
CASE WHEN
LENGTH(CONCAT(clientTitle, " ", clientFirstname, " ", clientSurname)) > 20
THEN
CONCAT(clientTitle, " ", CONCAT(SUBSTR(clientFirstname, 1, 1), "."), " ", clientSurname)
ELSE
CONCAT(clientTitle, " ", clientFirstname, " ", clientSurname)
END
) AS label
FROM Client

它有效,但对我来说不太好。连接语句写了 3 次,在任何情况下都做了 2 次。您知道如何让这个查询更好、更高效吗?

最佳答案

您可以将 case 移动到 concat() 中,只是为了名字。

SELECT upper(concat(c.clientTitle, ' ',
(case when length(concat(c.clientTitle, ' ', c.clientFirstname, ' ', c.clientSurname)) > 20
then concat(left(c.clientFirstName, 1), '.')
else c.clientFirstName
end), ' ',
c.clientSurname
)
) AS label
FROM Client c;

我还通过删除两个空格并将 20 更改为 20 - 2 来更改长度计算(该公式旨在提醒您缺少两个空格) .表别名的使用也使代码更具可读性。

而且,我不会担心一种方法相对于另一种方法的性能。对短字符串的操作通常不是性能的驱动因素。

编辑:

如果您特别关心串联,则对 length 进行多次调用:

SELECT upper(concat(c.clientTitle, ' ',
(case when length(c.clientTitle) + length(c.clientFirstname) + length(c.client_Surname) > 20 - 2
then concat(left(c.clientFirstName, 1), '.')
else c.clientFirstName
end), ' ',
c.clientSurname
)
) AS label
FROM Client c;

但是,此类微优化不太可能对您的应用程序产生任何影响。

关于mysql - 条件 SELECT 中的重复连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18813326/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com