gpt4 book ai didi

php - 选择字符串中最长子串的行

转载 作者:可可西里 更新时间:2023-11-01 07:32:26 25 4
gpt4 key购买 nike

让我根据下面的例子来描述这个问题。假设有一个字符串“abc12345”(可以是任何一个!!!)并且有一个表 mytable 的列 mycolumn 为 varchar(100)。

有一些行以最后一个字符 5 结尾。
有些行以最后一个字符 45 结尾。
有些行以最后一个字符 345
结尾没有以最后一个字符 2345 结尾的行。

在这种情况下,应选择这些行:

SELECT * FROM mytable WHERE mycolumn LIKE "%345"

那是因为“345”是“abc12345”的最长右子串,它作为mycolumn列中至少一个字符串的右子串至少出现一次。任何想法如何在一个查询中编写它?谢谢。

最佳答案

这是一种蛮力方法:

select t.*
from (select t.*,
dense_rank() over (order by (case when mycolumn like '%abc12345' then 1
when mycolumn like '%bc12345' then 2
when mycolumn like '%c12345' then 3
when mycolumn like '%12345' then 4
when mycolumn like '%2345' then 5
when mycolumn like '%345' then 6
when mycolumn like '%45' then 7
when mycolumn like '%5' then 8
end)
) as seqnum
where mycolumn like '%5' -- ensure at least one match
from t
) t
where seqnum = 1;

这激发了这样的灵感:

select t.*
from (select t.*, max(i) over () as maxi
from t join
(select str, generate_series(1, length(str)) as i
from (select 'abc12345' as str) s
) s
on left(t.mycolumn, i) = left(str, i)
) t
where i = maxi;

关于php - 选择字符串中最长子串的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36321417/

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