sql-mysql 常用函数总结

//注意
mysql `` 的重要性 避免与mysql]中的关键字 相同而冲突
//类型
decimal(20,3) 类型 参数几位数字 保留小数点后几位

//时间 当天0点

AND u.create_time <![CDATA[ >= ]]> CURDATE()--当天0点
AND u.create_time <![CDATA[ <= ]]> DATE_ADD(CURDATE(), INTERVAL 24 HOUR) --向后24小时

//count函数相关
count(1) and count(字段)
两者的主要区别是
(1) count(1) 会统计表中的所有的记录数,包含字段为null 的记录。
(2) count(字段) 会统计该字段在表中出现的次数,忽略字段为null 的情况。即不统计字段为null 的记录。

执行效率上:  
列名为主键,count(列名)会比count(1)快  
列名不为主键,count(1)会比count(列名)快  
如果表多个列并且没有主键,则 count(1) 的执行效率优于 count(*)  
如果有主键,则 select count(主键)的执行效率是最优的  
如果表只有一个字段,则 select count(*)最优。

//转型

select CAST(RATE as DECIMAL(20, 2)) from t_apply

//mysql 非空 非空字符串 判断
,IF((ISNULL(aaa) || LENGTH(trim(aaa)) <![CDATA[ < ]]> 1),'-',aaa)
//常用函数--
//uuid
1.uuid SELECT REPLACE(uuid(), '-','');//替换
//随机数
2.select CEILING(RAND()*9+1);CEILING(RAND()*9000000000+1000000000);//在inset** select** 可以使用此生成不同id
//截取第一个,之前的位置
substring_index(XXX,',',1);
//拼接某参数  使用ifnull 更严谨
4.SELECT CONCAT('WWW',IFNULL(e.MON_POINT_ASSET_NO,''))

//时间-日期转换

时间转 字符串 date_format(colum, '%Y-%m-%d %H:%i:%s')
字符串桩时间 str_to_date(colum,'%Y-%m-%d %H:%i:%s')


//时间差
select TIMESTAMPDIFF(DAY, '2018-03-20 23:59:00', null);#返回null
select TIMESTAMPDIFF(HOUR, NULL, '2018-03-22 10:00:00');#返回null
select TIMESTAMPDIFF(MINUTE, '2018-03-20 09:00:00', '2018-03-22 10:00:00');

//将 总秒值 转为n天n时n分n秒
IFNULL((TIMESTAMPDIFF(SECOND,o.START_TIME,o.LAST_TIME)div (24 * 60 * 60)),0) as day,
IFNULL (((TIMESTAMPDIFF(SECOND ,o.START_TIME,o.LAST_TIME)mod(24*60*60)) div(60*60)),0) as hou,
IFNULL (((TIMESTAMPDIFF(SECOND ,o.START_TIME,o.LAST_TIME)mod(60*60)) div(60)),0) as min,
IFNULL ((TIMESTAMPDIFF(SECOND ,w.WARN_BEGIN_TIME, w.WARN_END_TIME)mod(60)),0) as sed
//ifnull
8.IFNULL(expr1,expr2)// 如果第一个参数不为空,则返回第一个参数,否则返回第二个参数。

//find_in_set 函数
SELECT FIND_IN_SET('d','a,b,c,d'); #返回4
select FIND_IN_SET('6', '1'); #返回0
#总结:所以如果list是常量,则可以直接用IN, 否则要用FIND_IN_SET()函数
SELECT * FROM a_project WHERE 'dd' in (字段);#不能查询出值!
SELECT * FROM a_project WHERE 'dd' in ('cc','dd','ee','ff'); # in 必须一样才能查询出结果
#FIND_IN_SET 可以解决这个问题
SELECT * from a_project WHERE FIND_IN_SET('ee',字段);
#如果list是常量,则可以直接用IN, 否则要用find_in_set()函数。
#ike是广泛的模糊查询,而 find_in_set() 是精确匹配
select * from a_project where FIND_IN_SET(p_id, '3654882128,9336264865');

//concat_ws ,group_concat函数 //可用于列转行
SELECT CONCAT_WS('|-.-|',p_id,p_name,p_content ) FROM a_project ;
#查询name 相同的人的所有id
SELECT MAX(p_num) FROM a_project GROUP BY p_name;
#显示相同名字的人的id号
SELECT p_name, group_concat(p_id) FROM a_project GROUP BY p_name; #默认就是用','分开
#查询name 相同的所有id 以',分隔,并将id的顺序按照p_num 排序
SELECT p_name, group_concat(p_id ORDER BY p_num DESC SEPARATOR '!-.-!') FROM a_project GROUP BY p_name;

在MySQL中SUM进行减法操作的时候:
SUM(B.REAL_PRICE) - SUM(B.COST_PRICE)
错误写法:
//但是这种 写法在ORACLE和DB2中是可以的
SUM(B.REAL_PRICE-B.COST_PRICE)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值