我有一个SQL表。其中我需要使用group by操作。要在group by子句中使用的列是value,如果包含"cr“或"dr”,则需要将列值替换为空字符串,然后继续执行group by。
如果列描述以'cr‘或'dr’开头,我们必须将它的第一次出现替换为empty.Like 'cr abcd‘将变为'abcd’,并且前两行可以匹配。此外,“cr abcdcr def”将是“abcdcr def”,仅当以“cr”或“dr”开头需要替换时才会第一次出现。
**Select description from xyz group by description(replace 'cr or dr with empty')**
Desired result is - abcd , abcdef, abcdefcr发布于 2021-03-08 17:01:34
您可以尝试使用下面的查询。这将仅更新第一个匹配项。
Select
CASE WHEN description like 'cr%' THEN
CONCAT(
SUBSTRING(description, 1, locate('cr',description)-1),
SUBSTRING(description,locate('cr',description)+2,length(description)))
WHEN description like 'dr%' THEN
CONCAT(
SUBSTRING(description, 1, locate('dr',description)-1),
SUBSTRING(description,locate('dr',description)+2,length(description)))
ELSE
description END
as Result
from xyz
group by
CASE WHEN description like 'cr%' THEN
CONCAT(
SUBSTRING(description, 1, locate('cr',description)-1),
SUBSTRING(description,locate('cr',description)+2,length(description)))
WHEN description like 'dr%' THEN
CONCAT(
SUBSTRING(description, 1, locate('dr',description)-1),
SUBSTRING(description,locate('dr',description)+2,length(description)))
ELSE
description END 发布于 2021-03-08 21:01:23
您还没有说明数据库。在标准SQL中,您可以执行以下操作:
select distinct (case when description like 'cr %' or description like 'dr %'
then substring(description from 4)
else description
end) as new_description
from xyz;不清楚为什么聚合是必要的,所以我将其更改为select distinct。
注意:任何特定数据库中的确切语法都可能与上面的语法略有不同。
编辑:
在MySQL中,您可以使用:
select distinct (case when description like 'cr %' or description like 'dr %'
then substr(description, 4)
else description
end) as new_description
from xyz;https://stackoverflow.com/questions/66526522
复制相似问题