Mysql用法经典收藏

1、金额千分位

mysql专门有一个格式化函数format,就是处理千分位数字的

select format(123456789.126,2);
结果:123,456,789.13

扩展一个批量转换的语句:

把某个数值字段转换了千分位后,存放在另一个字段

update dept_budget_ext set estimated_amount_str = (select format(estimated_amount,2)), unit_price_str = (select format(unit_price,2)) where estimated_amount_str='' or unit_price_str='';

 

2、mysql对String类型的数字值排序

如果一个字段是String类型,但是存的内容是数字,如果默认排序是按照字符串来排序的,就不准确了

想要按照数字类型排序方法如下:

需要排序的字段是:excesstime 

1、排序的字段前面加 --

2、排序的字段-0

1、SELECT * FROM domainname order by --excesstime asc;
2、SELECT * FROM domainname order by excesstime-0 asc;

3、某个字段字符串相加

id => 1
text => abc

id => 2
text => def

id => 3
text => ghi

id=> 4
text => jkm
SELECT SUM(id), GROUP_CONCAT(text SEPARATOR '.') FROM t

执行结果:"abc.def.ghi.jkm"

4、MySql 模糊查询,按匹配度排序

开始是产品提的需求,从来没用过模糊查询,还能带上匹配程度的。这个就像字符串匹配,应该不存在匹配度这个说法,因为匹配度如何定义也是一件复杂的事情,比如词语的同义等。但是用mysql来实现“伪匹配度”还是可行的。下边总结了几种思路:

一、根据关键字出现的位置,给出不同的权重

比如只包含关键字的,权重最高。但是缺点也很明显,太粗糙。

SELECT *
FROM demo
WHERE c LIKE '%人民日报%'
ORDER BY
CASE
WHEN c LIKE '人民日报' THEN 0
WHEN c LIKE '人民日报%' THEN 1
WHEN c LIKE '%人民日报' THEN 3
ELSE 2
END

不同权重

二、看长度

其实也很好理解,长度越短,说明里面匹配的字符越多

SELECT * FROM demo
WHERE c LIKE '%人民日报%'
ORDER BY length(c)
LIMIT 10

剩余长度

但是不能避免出现多个关键字的情况,可以通过比例(剩余长度/长度),越小说明占比越大,匹配度越高:

SELECT *
FROM demo
WHERE c LIKE '%人民日报%'
ORDER BY length(REPLACE(c,'人民日报',''))/length(c)
LIMIT 10

  • 9
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值