MySQL数据库学习笔记五.docx
《MySQL数据库学习笔记五.docx》由会员分享,可在线阅读,更多相关《MySQL数据库学习笔记五.docx(14页珍藏版)》请在冰豆网上搜索。
![MySQL数据库学习笔记五.docx](https://file1.bdocx.com/fileroot1/2023-7/16/9db34ee2-5ba4-447a-b6fb-c9cfa8bbb54f/9db34ee2-5ba4-447a-b6fb-c9cfa8bbb54f1.gif)
MySQL数据库学习笔记五
MySQL数据库学习笔记(五)----MySQL字符串函数、日期时间函数
一、常见字符串函数:
∙1、CHAR_LENGTH 获取长度(字符为单位)
∙2、FORMAT 格式化
∙3、INSERT 替换的方式插入
∙4、INSTR 获取位置
∙5、LEFT/RIGHT 取左、取右
∙6、LENGTH 获取长度(字节为单位)
∙7、LTRIM/RTRIM/TRIM去空格(左/右/自定义)
∙8、STRCMP 字符串比较
∙9、CONCAT 字符串拼接
∙10、SUBSTRING 字符串截取
1、CHAR_LENGTH:
获取长度(字符为单位)
CHAR_LENGTH(str)
解释:
返回值为字符串str的长度,计算的单位为字符(一个中文也算一个字符)
举例:
如果是查询已知表格里的字段长度,可以这样写:
2、FORMAT:
FORMAT(X,D)
解释:
将数字X的格式写为'#,###,###.##',以四舍五入的方式保留小数点后D位,并将结果以字符串的形式返回。
若D为0,则返回结果不带有小数点,或不含小数部分。
举例:
3、INSERT:
替换的方式插入
INSERT(str,pos,len,newstr)
解释:
返回字符串str,从原str的pos位置开始,用字符串newstr来替换,替换的长度为len。
如果pos超过字符串长度,则返回值为原始字符串。
假如len的长度超过后面字符串的长度,则从位置pos开始替换到字符串的结尾即可。
四个参数中若任何一个参数为的值为null,则整个函数的返回值为NULL。
举例:
将smyh001替换为smyh002
4、INSTR:
查找子字符串的位置
INSTR(str,substr)
解释:
返回字符串str中首次出现子字符串substr的位置。
举例:
5、LEFT/RIGHT:
字符串截取
∙左截取:
LEFT(str,len)
解释:
返回字符串str中,从左边开始算起的,前len个字符。
∙右截取:
RIGHT(str,len)
解释:
返回字符串str中,从右边开始算起的,前len个字符。
6、LENGTH:
求字符串长度(以字节为单位)
LENGTH(str)
解释:
返回值为字符串str的长度,单位为字节。
一个多字节字符算作多字节。
这意味着对于一个包含五个2字节字符的字符串,LENGTH()的返回值为10,而CHAR_LENGTH()的返回值则为5。
注:
∙GBK 编码中,一个中文字符是2个字节。
∙UTF-8编码中,一个中文字符是3个字节,一个英文字符是2个字节。
7、LTRIM/RTRIM/TRIM去空格(左/右/自定义):
∙去掉左边的空格:
LTRIM(str)
解释:
返回字符串str,其引导空格字符被删除。
∙去掉中间的空格:
RTRIM(str)
解释:
返回字符串str,其结尾空格字符被删除。
∙自定义去空格:
TRIM([{BOTH|LEADING|TRAILING}[remstr]FROM]str)
注:
大括号和中括号里面的参数为可选项,如果全部都加上的话,默认为参数both。
解释:
将原字符串str去掉空格返回。
只去开头(leading)的空格,只去结尾(trailng)的空格,或者同时去掉(both)开头和结尾的空格都行。
若分类符BOTH、LEADIN或TRAILING中没有一个是给定的,则假设为BOTH。
TRIM([remstrFROM]str)
解释:
remstr关键字的作用是去掉指定字符。
即所有包含remstr的前缀和/或后缀将被删除。
未指定情况下,即删除空格。
官方文档的举例:
8、STRCMP:
判断字符串是否相等
STRCMP(expr1,expr2)
解释:
判断两个字符串是否相等。
若所有的字符串均相同,则返回0;若根据当前分类次序,第一个参数小于第二个,则返回-1;其它情况返回1。
功能和比较器类似。
注:
字符串的大小是按照ANSI编码来比较的。
举例:
9、CONCAT:
字符串拼接
CONCAT(str1,str2,...)
解释:
返回结果为连将str1、str2···拼接之后产生的字符串。
如有任何一个参数为NULL,则返回值为NULL。
括号里可能有一个或多个参数。
如果所有参数均为非二进制字符串,则结果为非二进制字符串。
如果自变量中含有任意一个二进制字符串,则结果为一个二进制字符串。
一个数字参数将自动转化为与之相等的二进制字符串格式。
若要避免这种情况二进制的情况出现,可使用显式类型cast(str),将二进制的字符串转换为非二进制字符串。
例如:
SELECTCONCAT(CAST(int_colASCHAR),char_col)
举例:
(navicat编辑器会自动将二进制字符串转换为非二进制字符串)
10、SUBSTRING:
字符串截取
SUBSTRING(str,pos)
SUBSTRING(strFROMpos)
SUBSTRING(str,pos,len)
SUBSTRING(strFROMposFORlen)
解释:
不带有len参数的格式从字符串str返回一个子字符串,起始于位置pos。
带有len参数的格式从字符串str返回一个长度同len字符相同的子字符串,起始于位置pos。
使用FROM的格式为标准SQL语法。
也可能对pos使用一个负值。
假若这样,则子字符串的位置起始于字符串结尾的pos字符(也就是说,pos为正时,从左边算起;pos为负时,从右边算起)。
官方文档举例如下:
二、常见日期时间函数:
∙1、DAYOFWEEK、DAYOFYEAR、DAYOFMONTH
∙2、WEEKDAY
∙3、YEAR、QUARTER、MONTH、
∙4、HOUR、MINUTE、SECOND
∙5、TODAYS、FROMDAYS
∙6、CURDATE、CURTIME、NOW 获取当前时间
1、DAYOFWEEK、DAYOFYEAR、DAYOFMONTH
∙求星期几:
(一周中的第几天)
DAYOFWEEK(date)
解释:
返回date(1=周日,2=周一,...,7=周六)对应的工作日索引。
即:
date对应的范围是1至7。
∙求一年中的某天是第几天:
(一年中的第几天)
DAYOFYEAR(date)
返回date对应的一年中的天数,范围是从1到366。
∙求一个月中的某天是第几天:
(一个月的第几天)
DAYOFMONTH(date)
返回date对应的该月日期,范围是从1到31。
注:
DAY(date)和DAYOFMONTH(date)的含义相同。
举例:
2、WEEKDAY:
∙求星期几:
(一周的第几天)
WEEKDAY(date)
解释:
返回date(0=周一,1=周二,...6=周日)对应的工作日索引。
即:
date对应的范围是0至6。
注:
DAYOFWEEK(date)和WEEKDAY(date)的功能相同,唯一的区别在于date对应的取值范围。
3、YEAR、QUARTER、MONTH
∙求年份:
YEAR(date)
解释:
返回date对应的年份,范围是从1000到9999。
∙求季度:
QUARTER(date)
解释:
返回date对应的一年中的季度值,范围是从1到4。
∙求月份:
(该月是一年当中的第几个月)
MONTH(date)
解释:
返回date对应的月份,范围是从1到12。
举例:
4、HOUR、MINUTE、SECOND
∙求小时:
HOUR(time)
解释:
返回time对应的小时数。
对于日时值的返回值范围是从0到23。
∙求分钟:
MINUTE(time)
解释:
返回time对应的分钟数,范围是从0到59。
∙求秒数:
SECOND(time)
解释:
返回time对应的秒数,范围是从0到59。
举例:
5、TO_DAYS、FROM_DAYS
∙求某日期,一共经历了多少天:
(历史长河中)
TO_DAYS(date)
解释:
给定一个日期date,返回一个天数(从年份0开始的天数)。
∙求历史长河中的第某天,的日期:
FROM_DAYS(N)
解释:
给定一个天数N,返回一个DATE值。
使用FROM_DAYS()处理古老日期时,务必谨慎,他不用于处理阳历出现前的天数(1582)。
6、CURDATE、CURTIME、NOW
∙求当前的年月日:
CURDATE()
解释:
将当前日期按照'YYYY-MM-DD'或YYYYMMDD格式的值返回,具体格式根据函数用在字符串或是数字语境中而定。
举例:
∙求当前的时分秒:
CURTIME()
解释:
将当前时间以'HH:
MM:
SS'或HHMMSS的格式返回,具体格式根据函数用在字符串或是数字语境中而定。
举例:
∙求当前的年月日、时分秒:
NOW()
举例:
注:
如果now是放在语句当中,要看具体字段的格式要求。
比如说,如果是放在date字段中,则只显示年月日;如果是放在datetime字段中,则同时显示年月日和时分秒。