快好知 kuaihz订阅观点

 

MySQL用法几则(自用)

 按某字段中的部分数字来排序.

配方名称格式是ZP001,ZP123这样的格式,如何将检索结果按配方名称中ZP后面的数字从小到大(或相反)的顺序排列?

select `配方名称`, `LIPF6` from Maindb where (`配方名称` REGEXP "ZPd+") 

ORDER BY cast(substring(`配方名称`,3,3) as UNSIGNED) desc

where子句限定返回的结果是ZP+数字这样的格式,正则表达式的反斜杠要用两根表示.(一根是正则引擎用,一根被MySQL消耗了).

Order by子句后面的是灵魂,先用substring函数(与MID用法相同)提取字串,这样得到的是字符串,如果排序还是按字母排的,如111在20之前. 必须将它转化成数字,所以外面再套一个CAST函数将其转化为无符号整型,这样就可以比较了. 注意as写在括号内.

用法见MySQL的官方说明.   

https://dev.mysql.com/doc/refman/8.0/en/built-in-function-reference.html

https://dev.mysql.com/doc/refman/8.0/en/type-conversion.html

2. REGEXP类函数

有意思的是,在MySQL中,REGEXP或RLIKE 是函数REGEXP_Like()的同义词.

Regexp_like函数除了第1参数是字串,第2参数是正则模式外,还可以设置第三个参数,类型是字串,如i表示大小写不敏感(此为函数的默认模式), c表示大小写敏感,m表示匹配多行,n允许 . 号匹配终止符而不是行末.如果第三参数中有冲突的选项,以最右边的为准. 

MySQL中其它涉及正则表达式的函数还有: REGEXP_Instr, REGEXP_Replace, REGEXP_substring.

今天才发现,原来SQLite也支持REGEXP操作符的.

 见https://www.sqlite.org/lang_expr.html. 所以上面第1则在SQLITE数据库环境下也可以运行,不过转义的反斜杠用一根就行了.

3. 流程控制结构.

举例来说比较容易懂

select case  "B" when "a" then "Apple"  when "b" then "Bed"  else "Nothing" end;

返回结果为 Bed.

除了上面的Case..(when..then...)+..else..end结构外,还有一些可用的判断函数if, ifnull, nullif

比如

 SELECT IF(1<2,"yes","no");

返回结果yes. 这个用法与Excel里面的函数一样. 前面是条件真的结果,后面是条件假的结果.

IFNULL(expr1,expr2) 如果 expr1 非空, 则 IFNULL() 返回 expr1; 否则返回 expr2.

NULLIF(expr1,expr2) 如果 expr1 = expr2 则返回NULL, 否则返回expr1. NULLIF 与以下语句效果相同.

 CASE WHEN expr1 = expr2 THEN NULL ELSE expr1 END.

本站资源来自互联网,仅供学习,如有侵权,请通知删除,敬请谅解!
搜索建议:MySQL用法几则  自用  自用词条  用法  用法词条  MySQL  MySQL词条  
观点

 霍金与量子引力

 霍金与量子引力 左  芬2018年3月20-22日 (按:史蒂芬·霍金于2018年3月14日逝世。彭罗斯次日为其撰写了...(展开)