mysql strcmp s1 s2_Mysql常用函数整理

Mysql常用函数

最近用数据库比较多,之前没太关注函数这块儿,现在补补,mysql函数还是比较强大的,可以实现很多东西,有兴趣的小伙伴可以学习下~

以下为笔者整理的常用函数,包含字符串操作、日期操作、数字操作等,相对于mysql操作文档,笔者整理的只是一部分,有兴趣的可以自行挖掘~

日期函数

ADDDATE(d,n)

计算起始日期 d 加上 n 天的日期

ADDTIME(t,n)

时间 t 加上 n 秒的时间

DATEDIFF(d1,d2)

计算日期 d1->d2 之间相隔的天数

DATE_ADD(d,INTERVAL expr type)

计算起始日期 d 加上一个时间段后的日期

DATE_FORMAT(d,f)

按表达式 f的要求显示日期 d

DATE_SUB(date,INTERVAL expr type)

函数从日期减去指定的时间间隔。

DAYNAME(d)

返回日期 d 是星期几,如 Monday,Tuesday

DAYOFMONTH(d)

计算日期 d 是本月的第几天

DAYOFWEEK(d)

日期 d 今天是星期几,1 星期日,2 星期一,以此类推

DAYOFYEAR(d)

计算日期 d 是本年的第几天

EXTRACT(type FROM d)

从日期 d 中获取指定的值,type 指定返回的值。

type可取值为:

MICROSECOND

SECOND

MINUTE

HOUR

DAY

WEEK

MONTH

QUARTER

YEAR

SECOND_MICROSECOND

MINUTE_MICROSECOND

MINUTE_SECOND

HOUR_MICROSECOND

HOUR_SECOND

HOUR_MINUTE

DAY_MICROSECOND

DAY_SECOND

DAY_MINUTE

DAY_HOUR

YEAR_MONTH

LAST_DAY(d)

返回给给定日期的那一月份的最后一天

STR_TO_DATE(string, format_mask)

将字符串转变为日期:SELECT STR_TO_DATE("August 10 2020", "%M %d %Y");

-> 2020-08-10

SUBDATE(d,n)

日期 d 减去 n 天后的日期

YEARWEEK(date, mode)

返回年份及第几周(0到53),mode 中 0 表示周天,1表示周一,以此类推

TIMESTAMPDIFF

Mysql日期差函数,Mysql选择两个日期字段相差大于或小于一定时间

SELECT * from table where TIMESTAMPDIFF(type,pretime,latertime)>100;

TIMESTAMPDIFF函数,需要三个参数,type是比较的类型,可以比较FRAC_SECOND、SECOND、 MINUTE、 HOUR、 DAY、 WEEK、 MONTH、 QUARTER或 YEAR几种类型,pretime是前一个时间,比较时用后一个时间减前一个时间

date_format time_format

加入你有那么一个时间字符串,比如:20200601140113,想给他转化成时间的,那就这么写:

select

date_format(a.orderTime,'%Y%m%d %H:%i:%s') from xxx;

select

time_format(a.orderTime,'%H:%i:%s') from xxx;

那结合一下,假如我数据库存的时间是纯数字的字符串(verchar2)格式的字段,我又想筛选两张表两个字段时间差值为N分钟以内的数据,那我可以这么写:

select

date_format(a.orderTime,'%Y%m%d %H:%i:%s')

from qx a left join qypt b

on a.phone = b.phone

and timestampdiff(minute ,date_format(a.orderTime,'%H:%i:%s'),date_format(b.createDate,'%H:%i:%s')) < 2;

字符串函数

TRIM(S) LTRIM(s) RTRIM(s)

LTRIM(s) 去掉字符串 s 开始处的空格,RTRIM(s) 去掉后面空格,TRIM(s)去掉两端空格 ,比如一个列字段的值,里面有那么几个字段在字段的开始处多了一个空格,然后你拿这个字段去跟其他表关联的时候就会会因为这个空格从而关联失败,此时用LTRIM(s)就可以很好的解决问题,比如:

select a.type 类型名称,sum(b.groupCount) 单数,b.date 日期

from a

left join b

on LTRIM(a.qyName) = LTRIM(b.qyName) where b.date like '%20200607%' group by a.type,b.date

截取字符串

如果有一个字符串,形如:20200601135320,那么不同的截取字符串的方法得到的效果也不一样。

substr(s,)

select substr(orderTime,1,12) from XXX;

结果为:202006011353

MID(s,n,len)

SELECT MID("20200601135320", 2, 3)

结果为:020

SUBSTR(s, start, length)

从字符串 s 的 start 位置截取长度为 length 的子字符串

SUBSTRING(s, start, length)

从字符串 s 的 start 位置截取长度为 length 的子字符串

SUBSTRING_INDEX(s, delimiter, number)

返回从字符串 s 的第 number 个出现的分隔符 delimiter 之后的子串。

如果 number 是正数,返回第 number 个字符左边的字符串。

如果 number 是负数,返回第(number 的绝对值(从右边数))个字符右边的字符串。

REPLACE(s,s1,s2)

将字符串 s2 替代字符串 s 中的字符串 s1,比如要将abc字符串的b替换成z,则这么写:

SELECT REPLACE('abc','a','z');

REVERSE(s)

将字符串s的顺序反过来,abc变成cba.

STRCMP(s1,s2)

比较字符串 s1 和 s2,如果 s1 与 s2 相等返回 0 ,如果 s1>s2 返回 1,如果 s1

将字符串转换为大写

UPPER(s)

UCASE(s)

数字函数

ABS(x)

返回数字的绝对值

CEIL(x)

返回大于或等于 x 的最小整数

CEILING(x)

返回大于或等于 x 的最小整数

COUNT(expression)

返回查询的记录总数,expression 参数是一个字段或者 * 号

FLOOR(x)

返回小于或等于 x 的最大整数

GREATEST(expr1, expr2, expr3, ...)

返回列表中的最大值

LEAST(expr1, expr2, expr3, ...)

返回列表中的最小值

MAX(expression)

返回字段 expression 中的最大值

MIN(expression)

返回字段 expression 中的最小值

RAND()

返回 0 到 1 的随机数

SUM(expression)

返回指定字段的总和

高级函数

case when ...end

CASE expression

WHEN condition1 THEN result1

WHEN condition2 THEN result2

...

WHEN conditionN THEN resultN

ELSE result

END

CASE 表示函数开始,END 表示函数结束。如果 condition1 成立,则返回 result1, 如果 condition2 成立,则返回 result2,当全部不成立则返回 result,而当有一个成立之后,后面的就不执行了。

CAST(x AS type)

转换数据类型

CURRENT_USER()

返回当前用户

IF(expr,v1,v2)

类似三目运算非此即彼:

如果表达式 expr 成立,返回结果 v1;否则,返回结果 v2。

IFNULL(v1,v2)

如果 v1 的值不为 NULL,则返回 v1,否则返回 v2。

ISNULL(expression)

判断表达式是否为 NULL

LAST_INSERT_ID()

返回最近生成的 AUTO_INCREMENT 值

本文由 RebornChang 创作,采用 知识共享署名4.0 国际许可协议进行许可

本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名

最后编辑时间为:

2020/06/12 02:46

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值