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 [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

....

 

 

你可能感兴趣的:(mysql)