MySQL中的一些特殊函数

发布时间 2023-09-17 08:35:54作者: strongmore

FIELD

FIELD(s,s1,s2...)

SELECT FIELD("c", "a", "b", "c", "d", "e"); -- 返回字符串 c 在列表值中的位置,索引位置从 1 开始,没有返回 0

FIND_IN_SET

FIND_IN_SET(s1,s2)

SELECT FIND_IN_SET("c", "a,b,c,d,e"); -- 使用,分割为列表,返回字符串 c 在列表中的位置,索引位置从 1 开始,没有返回 0

对于一对多的情况,可能还是left join的效率更高。

LEAD

LEAD(<expression>[,offset[, default_value]]) OVER (
    PARTITION BY (expr)
    ORDER BY (expr)
) 
select 
dt,
lead(1) over(order by dt desc) as num_1
from test;

dt为创建时间,按照dt倒序并取第二条,就是前一天数据

参考

MySQL 中 FIND_IN_SET 使用和性能
关于 find_in_set 的性能问题