gpt4 book ai didi

MySQL按字段的子字符串排序

转载 作者:行者123 更新时间:2023-12-04 15:14:48 25 4
gpt4 key购买 nike

无法修改非常旧的数据库,因此最终用户没有添加“customType”字段,而是“发明”了一种对项目进行分类的方法。详细来说,如果描述字段:

  • *开头,属于type1
  • #开头,属于type2
  • **开头,属于type3
  • 否则,它是type4

现在,有人要求我生成一些按“类别”字段排序但按类型分组的报告。现在,除了将查询分成 4 个部分之外,我确实可以做到,我想知道我是否可以在一个查询中完成。

如果存在“customType”字段,查询将非常简单:

SELECT * FROM item ORDER BY customType, category

可惜我做不到。我的第一次尝试是这样的

SELECT * FROM item ORDER BY SUBSTRING(description,2), category

但问题是我(正确地)将按类型分组的项目放在一起,但类别没有放在一起。更清楚地说,我想要一个类似的输出

aaaaa|cat1
ddddd|cat1
bbbbb|cat2
ccccc|cat2
#aaaa|cat5
#bbbb|cat5

但是现在我得到了

aaaaa|cat1
bbbbb|cat2
ccccc|cat2
ddddd|cat1
#aaaa|cat5
#bbbb|cat5

如您所见,cat1/cat2 混在一起,类别应该放在一起

最佳答案

您可以尝试通过 CASE 表达式进行排序:

SELECT *
FROM item
ORDER BY
CASE WHEN LEFT(description, 2) = '**' THEN 3
WHEN LEFT(description, 1) = '*' THEN 1
WHEN LEFT(description, 1) = '#' THEN 2
ELSE 4 END,
category;

请注意,我们先检查以 ** 开头的描述,然后再检查以 * 开头的说明。这是为了避免将以 ** 开头的错误分类与以 * 开头的相同。

关于MySQL按字段的子字符串排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64520713/

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