- 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 [year, month, day, secord]
需求: 由于系统升级, 需将用户购买产品的有效期补偿 8小时.
解决: update purchase set expiry = date_add(expiry, interval 8 hour);
引用官网解释:
--mysql 官网解释 http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_date-add
- DATE_ADD(date,INTERVAL expr type) DATE_SUB(date,INTERVAL expr type)
这些函数执行日期运算。 date 是一个 DATETIME 或DATE值,用来指定起始时间。 expr 是一个表达式,用来指定从起始日期添加或减去的时间间隔值。 Expr是一个字符串;对于负值的时间间隔,它可以以一个 ‘-’开头。 type 为关键词,它指示了表达式被解释的方式。
关键词INTERVA及 type 分类符均不区分大小写。
以下表显示了type 和expr 参数的关系:
type 值 |
预期的 expr 格式 |
MICROSECOND |
MICROSECONDS |
SECOND |
SECONDS |
MINUTE |
MINUTES |
HOUR |
HOURS |
DAY |
DAYS |
WEEK |
WEEKS |
MONTH |
MONTHS |
QUARTER |
QUARTERS |
YEAR |
YEARS |
....