合理的利用sql函数,在特定情况下可以提高开发效率,缩短开发周期,把较复杂的业务逻辑放在sql上处理会让您的代码更简洁清晰。
- ASCII(str) 返回最左侧字符ASCII码值,如果str为0,返回0,如果是null,返回null。
- CONV(N,from_base,to_base)在2进制和36进制之间相互转化,任意一个参数为null,返回null,如果to_base为负数则N为当做有符号数,繁殖为无符号数。
- BIN(N) 返回N的二进制,N为长整数。
- CHAR(N,..)将参数解释为整数,返回ASCII码对应的字符。eg:CHAR(77,121,83,81,'76') --->"MySQL"
- CONCAT(STR1,...) 组合字符串,如果有一个参数为null返回null ,数字参数会变成等价的字符串。eg:CONCAT("My","SQL") --->MySQL 这个函数在项目中用到的比较多,把几个字段按照某种业务规则组合在一起,好处是在程序中可以很容易的拿到想要的结果。
- CHARACTER_LENGTH(STR) 返回字符串长度。
- POSITION(SUBSTR IN STR) 返回substr在str中第一次出现的位置,没有返回 0.
- LOCATE(SUBSTR,STR,POS) 返回substr在str中第一次出现的位置从pos开始,没有返回 0.
- LPAD(STR,LEN,PADSTR)返回str,在左侧用padstr填补,知道str为len长度 eg:SELECT LPAD('HI',4,"??") ----->"??HI".
- RPAD 填补右侧。
- FIND_IN_SET(STR,STRLIST) 返回str在strlist中的位置。 这个函数也运用的比较多,主要用来筛选特定的值 如:
select FIND_IN_SET(distA.ENDDATE, rankData.SALLIST) AS ranking FROM F WHERE ranking BETWEEN 1 AND 2 /*取两期*/
- GROUP_CONCAT(b.date ORDER BY b.date DESC) 返回一个数组.
- IFNULL(exp1,exp2) exp1为null,返回exp2,否则返回exp1 如果你不想再程序中一遍又一遍的判断参数是否为null,请在源头就把它解决。
- IF(expr1,expr2,expr3)如果expr1为true,返回expr2,否则返回expr3 。 在特定的业务下,这个函数可以实现行转列。
- DATE("1911-10-10") 返回指定日期 (考考你 1911-10-10是什么日子?)。
- DATE_FORMAT(DATE,"%Y-%m-%d") 日期格式化。
- DATE_ADD(CURDATE(),INTERVAL-1,YEAR) 返回距离指定日期1年前的日期。
使用update替换指定字段里的字符
UPDATE your_table SET name=REPLACE(name, 'gbin1.com', 'gbtags.com') WHERE name LIKE '%John%';
重设置指定table里的自动增加数值
下一次插入数据,那么id自动增加为2
ALTER TABLE your_table AUTO_INCREMENT = 2
为select语句添加一个自动增加的字段列
set @N = 0; SELECT @N := @N +1 AS number, name, surname FROM gbtags_users;
使用全文索引并且匹配搜索
select * from articles where MATCH(content_column) AGAINST ('music')
从一个表插入另外一个表
INSERT INTO yourtable (field1,field2,field3) SELECT newfield1,newfield2,'fixed value' FROM yourtable2
sql中两个列的值互换
update your_table t1 ,your_table t2 set t1.client_id=t2.target_comp_id ,t1.target_comp_id=t2.client_id where t1.target_comp_id='VE' and t1.id=t2.id