记录一下实际应用中mysql方面需要注意的地方
1、MySQL按照汉字的拼音排序
按照汉字的拼音排序,用的比较多是在人名的排序中,按照姓氏的拼音字母,从A到Z排序;
如果存储姓名的字段采用的是GBK字符集,那就好办了,因为GBK内码编码时本身就采用了拼音排序的方法(常用一级汉字3755个采用拼音排序,二级汉字就不是了,但考虑到人名等都是常用汉字,因此只是针对一级汉字能正确排序也够用了)。
直接在查询语句后面 添加 order by name asc; 查询结果按照姓氏的升序排序;
如果存储姓名的字段采用的是 utf8字符集,需要在排序的时候对字段进行转码;对于的代码是
order by convert(name using gbk) asc;
同样,查询的结果也是按照姓氏的升序排序
2、mysql排序字段为空的排在最后面
排序字段为orderid;
1、使用order by orderid desc实现降序时,orderid 为null数据的会排在数据的最后面;
但是,order by orderid升序时,orderid 为null的数据则会排在最前面,如果想要将orderid
为null的数据排在最后,就需要加上is null。
select * from user u order by u.orderid is null, u.orderid
3、CAST的数据类型转换函数
CAST ( expression AS data_type )
CAST 函数的可转换类型,包含:
- 二进制,同带binary前缀的效果 :
BINARY
- 字符型,可带参数 :
CHAR
- 日期 :
DATE
- 时间:
TIME
- 日期时间型 :
DATETIME
- 浮点数 :
DECIMAL
- 整数 :
SIGNED
- 无符号整数 :
UNSIGNED
3.1去除Decimal后面多余的0
#处理前
SELECT '0.12000','1.203010','-0.20'
#处理后
SELECT 0+CAST('0.12000' AS CHAR),0+CAST('1.203010' AS CHAR),0+CAST('-0.20' AS CHAR)
实际应用
select
ifnull(sum(ot.report_time_count),0) as "reportTimeCount" ,
ifnull(sum(ot.app_time_count),0) as "appTimeCount" ,
#先将visit_count转为保留两位小数的数值,求和之后使用 0 + CAST(expr AS CHAR) 去除小数点后面多余的0
#即如果是整数则展示整数,如果是小数则舍小数点末尾连续的0
0+CAST(ifnull(sum(cast(ot.visit_count as decimal(18,2))),0) as char) as "visitCount"
from own_test ot
4、mysql大于等于、小于等于的写法
大于等于 <![CDATA[ >= ]]>
小于等于 <![CDATA[ <= ]]>
大于 <![CDATA[ > ]]>
小于 <![CDATA[ < ]]>
原符号 | < | <= | > | >= | & | ’ |
替换符号 | < | <= | > | >= | & | ' |