日期:2014-05-16  浏览次数:20643 次

mysql 查询学习积累
  1. 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