九道门丨超全整理!SQL中的常用函数都在这里啦!

哎哟,2 02 2 年那个城市啊,我查了一下,咱们得聊聊SQL里的函数,这玩意儿啊,就像是数据库里的魔法师,能变出各种数据的花样。

首先得说聚合函数,这玩意儿啊,就像是个大算盘,能帮你把一串数字加起来、算平均、数个数,还能找出最大最小值。
比如说,AVG()这个函数,它就能帮你算出平均工资,COUNT()能帮你数出工资超过8 万的人有多少,MAX()和MIN()分别找出最高和最低工资。
还有SUM(),这可是算总工资的利器。

然后是标量函数,这玩意儿啊,对每一条记录都下得了手,能算术运算、能改字符串。
比如说ROUND(),它能把数字四舍五入,CEIL()和FLOOR()能分别往上或往下舍入,ABS()能算绝对值,POWER()能算幂次方。
字符函数嘛,比如LOWER()能帮你把大写字母变成小写,UPPER()反过来,TRIM()能帮你去掉前后空格,CONCAT()能帮你把两个字符串拼在一起,SUBSTRING()能从字符串里切出一段来。

哎,这SQL函数啊,用起来真是方便,就像是个小助手,能帮你把数据变成各种有用的信息。
记得啊,这些函数啊,用得越多,你的数据库操作就越灵活,数据报告也越漂亮。

SQL时间函数用法总结(Mysql)附:工作中常用的hive_sql的时间函数用法

哎哟,你这总结写得倒是挺全乎。
我当年搞MySQL的时候,时间函数用得那叫一个溜。
记得1 4 年我在北京那会儿,有个项目得统计用户登录时间,那会儿就靠NOW()和UNIX_TIMESTAMP()来回转。
UNIX_TIMESTAMP()把日期转成那串数字,方便存数据库,查起来也快。
转回来用FROM_UNIXTIME(),显示给用户看。

后来用了Hive,那感觉也差不多。
1 5 年在上海,有个大数据平台,里面好多数据时间戳都是UNIX的,得转成看得懂的时间。
FROM_UNIXTIME()用得是贼勤,还得指定格式,像'yyyy-MM-dd',不然默认格式有时候看着费劲。
CURRENT_DATE和CURRENT_TIME也常用,搞报表的时候得知道今天是哪天。

运算函数嘛,DATE_ADD和DATE_SUB用得更多。
1 6 年在广州,算用户过期时间,就得用DATE_ADD往用户注册日期上加天。
DATEDIFF也常用,比如算订单多少天没付款了,DATEDIFF一算,嘿,立马知道。
TIMESTAMPDIFF那块我没常用,感觉跟DATEDIFF功能差不多,可能细粒度控制时间单位用得上。

总的来说,MySQL和Hive的时间函数,核心都那几个,用法也像。
就是Hive在分布式环境下跑,有时候性能上得注意。
我这都是十年前的坑踩出来的经验,现在新版本啥情况,我就不敢瞎讲了。

SQL中如何连接不同字段 常用字符串拼接函数使用指南

嘿,你问我SQL拼接字段的事儿是吧?行,我给你捋捋,都是我自己踩坑总结出来的。

上周有个客人问我做报表的时候怎么把"名"和"姓"拼成"全名",真是头疼。
其实啊,这事儿没你想的那么简单,不同数据库处理方式还特不一样。

先说最常用的几个函数。
CONCAT()这玩意儿在MySQL里挺给力的,不管你传几个参数,直接都摞一块儿了,连NULL都不带处理的,它就当空字符串。
但在SQL Server、Oracle、PostgreSQL这些地方就麻烦了,只要里面有个字段是NULL,结果就整个都变成NULL,特烦人。
我记得2 02 3 年我在上海某商场做项目的时候,因为这个坑差点没把老板的KPI搞崩。

所以啊,如果你知道你的数据里肯定有NULL,那最好先用COALESCE()或者ISNULL()把这些NULL给干掉。
COALESCE()最牛逼,哪个不是NULL就返回第一个非空的,特别灵活。
SQL Server那帮人比较懒,就喜欢用ISNULL(),就替你把NULL换成空字符串。
这两个函数用多了,你就知道哪个更顺手了。

再说说拼接带分隔符的。
CONCAT_WS()这函数简直是救星,第一个参数当分隔符,后面参数里有NULL它自动跳过,不会多加分隔符。
比如拼地址,城市、省份、国家可能有个别是空的,用这个函数就完美。
我上次做电商项目,用这个函数处理用户地址,代码量少一半,老板还夸我聪明。

然后就是数据库自带的操作符。
SQL Server就爱用+,但记住啊,它有个毛病,只要参数里有NULL,结果就立马变NULL。
PostgreSQL、Oracle、SQLite那边喜欢用||,这个稍微好点,但参数里有NULL照样影响结果。
用这些得特别小心,不然写半天发现结果都是NULL,特闹心。

还有啊,千万别在WHERE子句里拼接。
我之前有个项目就是这搞坏的,本来跑得飞快的查询,一拼接结果就卡了半天。
后来查资料才知道,拼接操作会让索引失效,数据库只能全表扫描。
那玩意儿在大数据量上简直要命,你想想,几百万条数据全表扫描,老板的KPI还怎么看?所以啊,能不在查询里拼就尽量不在查询里拼,要么提前处理好存起来,要么在程序里拼。

选哪种方法得看情况。
要是不用分隔符,就CONCAT()或者||随便用哪个都行。
要是需要分隔符,那CONCAT_WS()是首选。
处理NULL,COALESCE()最稳,ISNULL()就看你用的是不是SQL Server。

最后说说用场景。
拼姓名、拼地址这些常见得狠。
我上次做客户管理系统,就是把"名"和"姓"拼成"全名",用户看着才舒服。
还有生成SKU编码,就是商品分类+类型+尺寸拼一块儿,用CONCAT_WS()加分隔符-,特别标准。
报表生成也常用,把地址拆成好几列,拼成一行显示,报表看着才整齐。

反正你看着办吧。
数据库这玩意儿,用多了就明白,多踩几次坑就懂了。
我还在想这个问题,怎么把拼接的代码写得更优雅点...