php获取最长字符串,php – 选择具有字符串最长子字符串的行

让我根据下面的例子描述问题.

让我们说有一个字符串“abc12345”(可能是任何!!!)并且有一个表mytable,其列为mycolumn of 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,mysql,sql

来源: https://codeday.me/bug/20190623/1269623.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值