- FIND_IN_SET(str,strlist)
如 talbe1 (id, level) level 取值范围是在另一张表中配置conf的, 值为 [ a,b,c] 想要查询table1 中level值为 a,b, c 任意一个的列. 思路:想到 其它语言中用in [list] 或 java中 的contains 方法, mysql是否有类似方法呢?
在网上搜索终于找到了mysql 自带的函数 FIND_IN_SET 用法:
--mysql 官网解释 http://dev.mysql.com/doc/refman/5.1/zh/functions.html#string-functions---
FIND_IN_SET(str,strlist)
假如字符串str 在由N 子链组成的字符串列表strlist 中, 则返回值的范围在 1 到 N 之间 。一个字符串列表就是一个由一些被‘,’符号分开的自链组成的字符串。如果第一个参数是一个常数字符串,而第二个是type SET列,则 ? FIND_IN_SET() 函数被优化,使用比特计算。如果str不在strlist 或strlist 为空字符串,则返回值为 0 。如任意一个参数为NULL,则返回值为 NULL。 这个函数在第一个参数包含一个逗号(‘,’)时将无法正常运行。?
?
mysql> SELECT FIND_IN_SET('b','a,b,c,d');
?
? ? ? ? -> 2
?
---
解决:?
select * from table1
where find_in_set(level, (select * from conf where key='level') ) >0
解释: >0, 表示level在集合[a,b,c]中出现的位置, 0表示未找到.?
注: mysql中没有boolean类型, 只有0:false; 1:true;
总结: mysql 本身自带了很多字符串操作 ,还需慢慢学习积累.
?
2. DATE_ADD(date,INTERVAL?expr?type) DATE_SUB(date,INTERVAL?expr?type)
:表示日期 增加/减少 N [ye