MySql5.6从零开始学之MySQL函数

MySQL中的函数从功能分,可以分为:数学函数、字符串函数、日期和时间函数、条件判断函数、系统信息函数和加密函数等其他函数。

一、数学函数

一般情况下,当有错误产生的时候,数学函数将会返回NULL。

1、绝对值函数ABS(X)和返回圆周率的函数PI()。

    ABS(X)返回X的绝对值,PI()返回圆周率的值。

2、平方根函数SQRT(X)和求余函数MOD(X,Y)。

    SQRT(X)返回非负数X的二次方根,如果X是负数就返回NULL。MOD(X,Y)返回X被Y除后的余数。

3、获取整数的函数CEIL(X),CEILING(X),FLOOR(X)。

    CEIL(X)和CEILING(X)意义相同,返回不小于X的最小整数值,返回值转化成一个BIGINT。

    FLOOR(X)返回一个不大于X的最大整数值,返回值转化成一个BIGINT。

4、获取随机数的函数RAND(),RAND(X)。

    RAND()返回一个随机浮点数v,范围0<=v<=1。

    RAND(X)返回一个随机浮点数v,范围0<=v<=1。但是X值相同的两个函数返回的随机数相同。

5、四舍五入函数ROUND(X)、ROUND(X,Y)和TRUNCATE(X,Y)。

    ROUND(X)进行四舍五入保留整数。

    ROUND(X,Y)返回一个最接近X的值,这个值保留到小数点后y位;如果Y为负数,就保留到小数点左边的相应位数,这些位直      接保存为0,不进行四舍五入。

    TRUNCATE(X,Y)返回被舍去至小数点后Y位的数字X,不进行四舍五入,如果Y为负数,小数点左边到第Y位的书直接保存0。

6、符号函数SIGN(X)。

    返回参数X的符号。X的值为正、零或负时分别返回1、0、-1。

7、幂运算函数POW(X,Y)、POWER(X,Y)、EXP(X)。

    POW(X,Y)和POWER(X,Y)返回X的Y次乘方的结果值。

    EXP(X)返回e的X乘方的结果值。

8、对数函数LOG(X)和LOG10(X)。

    LOG(X)返回X的自然对数,X相对于基数e的对数。

    LOG10(X)返回X的技术为10的对数。

9、角度和弧度相互转换的函数RADIANS(X)和DEGREES(X)。

    RADIANS(X)将参数X由角度转化为弧度。

    DEGREES(X)将参数X由弧度转化为角度。

10、正弦函数SIN(X)和反正弦函数ASIN(X)。

    SIN(X)返回X的正弦,其中X为弧度值。

    ASIN(X)返回X的反正弦,即正弦为X的值。如果X不在-1和1之间,就返回NULL。

11、余弦函数COS(X)和反余弦函数ACOS(X)。

    COS(X)返回X的余弦,其中X的值为弧度值。

    ACOS(X)返回X的反余弦,即余弦是X的值。如果X不在-1和1之间,就返回NULL。

12、正切函数TAN(X)、反正切函数ATAN(X)和余切函数COT(X)。

    TAN(X)返回X的正切,其中X为弧度值。

    ATAN(X)返回X的反正切,即正切为X的值。

    COT(X)返回X的余切。

二、字符串函数

1、计算字符串字符数的函数和字符串长度的函数。

    CHAR_LENGTH(str)返回值是字符串str所包含的字符个数。一个多字节字符算作一个单字符。

    LENGTH(str)返回字符串的字节长度,一个汉字是3个字节,一个数字或字母算一个字节。

2、合并字符串函数CONCAT(s1,s2,...)、CONCAT_WS(x,s1,s2,...)

    CONCAT(s1,s2,...)返回结果为连接参数产生的字符串,或许有一个或多个参数。

    CONCAT_WS(x,s1,s2,...)也是连接字符串,但是第一个参数x是其他参数的分隔符。如CONCAT_WS('-','aaa','bbb')会返回   'aaa-bbb'。如果第一个参数x为NULL,就会返回NULL;如果后面的字符串为空,会忽略这个NULL值。

3、替换字符串的函数INSERT(s1,x,len,s2)

    返回字符串s1,其子字符串起始于x位置和被字符串s2取代的len字符。如果x闯过字符串长度,返回原始字符串;如果len的长度大于其他字符串长度,就从位置x开始替换;如果任意一个参数为NULL,就返回NULL。

4、字母大小写转换函数

    LOWER(str)或者LCASE(str)都可以将字符串str中的字母字符全部转换成小写字母。

    UPPER(str)或者UCASE(str)都可以将字符串str中的字母字符全部转换成大写字母。

5、获取指定长度的字符串的函数LEFT(s,n)、RIGHT(s,n)

    LEFT(s,n)返回字符串s开始的最左边n个字符。

    RIGHT(s,n)返回字符串s开始的最右边n个字符。

6、填充字符串的函数LPAD(s1,len,s2)、RPAD(s1,len,s2)

    LPAD(s1,len,s2)返回字符串s1,其左边由字符串s2填补到len字符长度。

    RPAD(s1,len,s2)返回字符串s1,其右边由字符串s2填补到len字符长度。

7、删除空格的函数LTRIM(s)、RTRIM(s)、TRIM(s)。

    LTRIM(s)返回字符串s1,字符串左侧空格字符被删除。

    RTRIM(s)返回字符串s1,字符串右侧空格字符被删除。

    TRIM(s)返回字符串s1,字符串两侧空格字符被删除。

8、删除指定字符串的函数TRIM(s1 FROM s)。

    删除字符串两边所有子字符串s1,s1为可选项,在未指定的情况删除空格。

9、重复生成字符串的函数REPEAT(s,n)

    返回一个由重复字符串s组成的字符串,n是重复次数。

10、空格函数SPACE(n)和替换函数REPLACE(s,s1,s2)

    SPACE(n)返回一个由n个空格组成的字符串。

    REPLACE(s,s1,s2)使用字符串s2替换字符串s中所有的字符串s1。

11、比较字符串大小的函数STRCMP(s1,s2)

    STRCMP(s1,s2)如果所有的字符串都一样,返回0;s1小于s2,返回-1;s1大于s2,返回1。一个字符一个字符的比较。

12、获取子串的函数SUBSTRING(s,n,len)和MID(s,n,len)

    两者作用相同。从字符串s返回一个长度为len的子字符串,起始于位置n。如果n为负值,起始位置就在字符串从右往左数的第 n个字符位置(就是倒数n个字符位置)。

13、匹配子串开始位置的函数

    LOCATE(str1,str2)、POSITION(str1 IN str)和INSTR(str,str1)三个函数相同,返回子字符串str1在字符串str中的开始位置。

14、字符串逆序的函数REVERSE(s)

    将字符串反转。

15、返回指定位置的字符串函数。

    ELT(N,str1,str2,...strn),若N=1,就返回str1;若N=2,就返回str3;若N=n,就返回strn;若N小于1或大于参数的数目,返回NULL。

16、返回指定字符串位置的函数FIELD(s,s1,s2,...)

    返回字符串s在列表s1,s2,...中第一次出现的位置,找不到s的情况下,返回0;s为NULL时,返回0。

17、返回子串位置的函数FIND_IN_SET(s1,s2)

    返回字符串s1在字符串列表s2中出现的位置,字符串列表是由多个逗号分开的字符串组成的列表。若s1不在s2或s2为空字符串,返回0;如果任意一个参数为NULL,就返回NULL。这个函数在s1中包含一个逗号时无法正常运行。

18、选取字符串的函数MAKE_SET(x,s1,s2,...)

    返回由x的二进制指定的相应位的字符串组成的字符串,s1对应比特1,s2对应比特01。

三、日期和时间函数

1、获取当前日期的函数和获取当前时间的函数。

      CURDATE()和CURRENT_DATE()函数作用相同,返回当前日期格式为“YYYY-MM-DD”,当使用CURDATE()+0或者CURRENT_DATE()+0时,返回时间格式“YYYYMMDD”。

      CURTIME()和CURRENT_TIME()函数作用相同,返回当前时间格式是“HH:MM:SS”,当使用CURTIME()+0或者CURRENT_TIME()+0时,返回时间格式“HHMMSS.000000”。

2、获取当前日期和时间的函数。

      CURRENT_TIMESTAMP()、LOCALTIME()、NOW()和SYSDATE()这四个函数相同,获取日期时间格式是:“YYYY-MM-DD HH:MM:SS”或“YYYYMMDDHHMMSS”。

3、UNIX时间戳函数

      UNIX_TIMESTAMP(data)如果无参数调用,就返回一个Unix时间戳(‘1970-01-01 00:00:00’GMT之后的秒数)作为无符号整数。如果用data调用UNIX_TIMESTAMP(data),就会将参数值以‘1970-01-01 00:00:00’GMT后的秒数形式返回。

      FROM_UNIXTIME(data)函数将UNIX时间戳转化成普通格式的时间。

4、返回UTC日期的函数和返回UTC时间的函数

      UTC_DATE()函数返回当前UTC(世界标准时间)日期值,格式是‘YYYY-MM-DD’或者‘YYYYMMDD’。使用UTC_DATE()+0返回的格式是:‘YYYYMMDD’。

      UTC_TIME()返回当前UTC时间值,格式是‘HH:MM:SS’或者‘HHMMSS’。使用UTC_TIME()+0返回的格式是“HHMMSS.000000”。

5、获取月份的函数MONTH(date)和MONTHNAME(date)。

      MONTH(date)函数返回date对应的月份,范围值是1~12。

      MONTHNAME(date)函数返回日期date对应月份的英文全名。

6、获取星期的函数DAYNAME(d)、DAYOFWEEK(d)和WEEKDAY(d)。

      DAYNAME(d)返回d对应的工作日的英文名称,例如Sunday、Monday。

      DAYOFWEEK(d)返回d对应的一周中的索引(位置)。1表示周日,2表示周一,......,7表示周六。

      WEEKDAY(d)返回d对应的工作日索引。0表示周一,1表示周二,......,6表示周日。

7、获取星期数的函数WEEK(d)和WEEKOFYEAR(d)

      WEEK(d)计算日期d是一年中的第几周。WEEK(d)的双参数形式允许指定该星期是否起始于周日或周一。范围是0~53或者1~53。

      WEEKOFYEAR(d)计算某天位于一年中的第几周,范围是1~53.相当于WEEK(d,3)。

8、获取天数的函数DAYOFYEAR(d)和DAYOFMONTH(d)

      DAYOFYEAR(d)返回d是一年中的第几天,范围是1~366。

      DAYOFMONTH(d)返回d是一个月中的第几天,范围是1~31。

9、获取年份、季度、小时、分钟和秒钟的函数

      YEAR(date)返回date的年份,范围是1970~2069。如果年份的位置只有两位数,那么‘00~69’转化成‘2000~2069’,‘70~99’转化成‘1970~1999’。

      QUARTER(date)返回一年中的季度值。范围是1~4。

      MINUTE(time)返回time中的分钟数,范围是0~59。

      SECOND(time)返回time中的秒钟数,范围是0~59。

10、获取日期的指定值函数EXTRACT(type FROM date)。

       EXTRACT(type FROM date)从日期中提取一部分,并不执行计算,比如EXTRACT(YEAR FROM  “2011-07-02”)会返回2011。EXTRACT(YEAR_MONTH FROM  “2011-07-02”)会返回201107,EXTRACT(DAY_MINUTE FROM  “2011-07-02 01: 02 :03”)会返回020102。

11、时间和秒钟转换的函数

       TIME_TO_SEC(time)将time转化为秒。

       SEC_TO_TIME(seconds)将秒转化为HH:MM:SS。

12、计算日期和时间的函数

        DATE_ADD(date,INTERVAL expr type)和ADDDATE(date,INTERVAL expr type)作用相同,执行日期加运算。date是一个时间值,expr是一个表达式,type为关键词。

        DATE_SUB(date,INTERVAL expr type)和SUBDATE(date,INTERVAL expr type)作用相同,执行日期减运算

        ADDTIME(date,expr)将expr值添加到date,并返回修改后的值,date是一个日期或者日期时间表达式,expr是一个时间表达式。

        SUBTIME(date,expr)中date减去expr,并返回修改后的值,date是一个日期或者日期时间表达式,expr是一个时间表达式。

        DATEDIFF(date1,date2)返回起始时间date1和结束时间date2之间的天数。(date1-dare2)。

类型(type值) 含义 expr表达式的形式
YEAR YY
MONTH MM
DAY DD
HOUR hh
MINUTE mm
SECOND ss
YEAR_MONTH 年和月 YY和MM之间用任意符号隔开
DAY_HOUR 日和小时 DD和hh之间用任意符号隔开
DAY_MINUTE 日和分钟 DD和mm之间用任意符号隔开
DAY_SECOND 日和秒钟 DD和ss之间用任意符号隔开
HOUR_MINUTE 时和分 hh和mm之间用任意符号隔开
HOUR_SECOND 时和秒 hh和ss之间用任意符号隔开
MINUTE_SECOND 分和秒 mm和ss之间用任意符号隔开

13、将日期和时间格式化的函数

       DATE_FORMAT(date,format)根据format指定的格式显示date值。主要的format格式如下表:

格式 描述
%a 缩写星期名
%b 缩写月名
%c 月,数值
%D 带有英文前缀的月中的天
%d 月的天,数值(00-31)
%e 月的天,数值(0-31)
%f 微秒
%H 小时 (00-23)
%h 小时 (01-12)
%I 小时 (01-12)
%i 分钟,数值(00-59)
%j 年的天 (001-366)
%k 小时 (0-23)
%l 小时 (1-12)
%M 月名
%m 月,数值(00-12)
%p AM 或 PM
%r 时间,12-小时(hh:mm:ss AM 或 PM)
%S 秒(00-59)
%s 秒(00-59)
%T 时间, 24-小时 (hh:mm:ss)
%U 周 (00-53) 星期日是一周的第一天
%u 周 (00-53) 星期一是一周的第一天
%V 周 (01-53) 星期日是一周的第一天,与 %X 使用
%v 周 (01-53) 星期一是一周的第一天,与 %x 使用
%W 星期名
%w 周的天 (0=星期日, 6=星期六)
%X 年,其中的星期日是周的第一天,4 位,与 %V 使用
%x 年,其中的星期一是周的第一天,4 位,与 %v 使用
%Y 年,4 位
%y 年,2 位

          GET_FORMAT(val_type,format_type)返回日期时间字符串的显示格式。


四、条件判断函数

1、IF(expr,v1,v2)函数

      IF(expr,v1,v2)如果表达式expr是true(expr<>0 and expr<>NULL),则IF()的返回值为v1;否则返回值为v2。IF()的返回值可以是数字值或者字符串。

2、IFNULL(v1,v2)函数

       加入v1不为NULL,则返回v1;否则返回v2。返回值可以是数字或者字符串。

3、CASE函数

      CASE expr WHEN v1 THEN r1 [WHEN v2 THEN r2] [ELSE rn] END

       该函数表示,如果expr的值等于某个vn,就返回对应位置THEN后面的结果;如果所有值都不相等,就返回ELSE后面的rn。

      CASE WHEN v1 THEN r1 [WHEN v2 THEN r2] [ELSE rn] END

      该函数表示,当某个vn的值为true时,就返回对应位置THEN后面的结果;如果所有值都不为true,就返回ELSE后面的rn。

五、系统信息函数

1、获取MySQL版本号、连接数和数据库名的函数。

  •        VERSION()返回服务器版本的字符串。
  •        CONNECTION_ID()返回MySQL服务器当前连接的次数每个连接都有各自唯一的ID。
  •        SHOWBASE()和SCHEMA()函数返回的是使用utf8字符集的默认数据库名。
  •        PROCESSLIST命令的输出结果显示了有哪些线程在运行,不仅可以查看当前所有的连接数,还可以查看当前的连接状态帮助识别出有问题的查询语句等。

     

      如图使用processlist命令查看正在运行的线程。

      各个列的含义和用途:

              ID列:用户登录MySQL时系统分配的“connection id”。

              User列:显示当前用户,如果不是root用户这个命令只显示用户权限范围内的sql语句。

              Host列:显示这个语句是从哪个IP的哪个端口上发出的可以用来追踪出现问题语句的用户。

              db列:显示这个进程目前连接的是哪个数据库。

              Command列:显示当前连接的执行的命令,一般取值为休眠(Sleep),查询(Query),连接(Connect)。

              Time列:显示这个状态持续的时间单位是秒。

              State列:显示使用当前连接的sql语句状态

              Info列:显示这个查询语句是判断问题语句的一个重要依据。

2、获取用户名的函数

       USER()、CURRENT_USER、CURRENT_USER()、SYSTEM_USER()和SESSION_USER()这几个函数返回当前被Mysql服务器验证的用户名和主机名的组合。

3、获取字符串的字符集和排序方式的函数。

      CHARSET(str)返回字符串str变量的字符集。

      COLLATION(str)返回字符串str的字符排列方式。

4、获取最后一个自动生成的ID值的函数。

      LAST_INSERT_ID()自动返回最后一个INSERT或UPDATE为AUTO_INCREMENT列设置的第一个发生的值。即数据库最新被修改那一条数据的ID。如果同时插入几条数据,本函数会返回同时插入的那几条数据的第一条数据的ID(具体返回的数值建议尝试一下)。


六、加密函数

1、加密函数PASSWORD(str)。

      PASSWORD(str)从原明文密码str计算并返回加密后的密码字符串,当参数为NULL的时候返回NULL。

2、加密函数MD5(str)。

      MD5(str)为字符串算出一个MD5  128比特检验和。该值以32位十六进制数字的二进制字符串形式返回,当参数为NULL的时候返回NULL。

3、加密函数ENCODE(str,pswd_str)。

      ENCODE(str,pswd_str)使用pswd_str作为密码,加密str。结果是一个和str长度相同的二进制字符串。

4、解密函数DECODE(crypt_str,pswd_str)。

      DECODE(crypt_str,pswd_str)使用pswd_str作为密码,解密加密字符串crypt_str。crypt_str是由ENCODE()返回的字符串。


七、其他函数

1、格式化函数FORMAT(x,n)

      FORMAT(x,n)将数字x格式化并以四舍五入的方式保留小数点后n位。

2、不同进制的数字进行转换的函数

      CONV(N,from_base,to_base)函数进行不同进制数之间的转换。返回值为数值N的字符串表示。由from_base进制转化为to_base进制。如果任意一个参数为NULL,返回NULL。

3、IP地址与数字相互转换的函数

     INET_ATON(expr)给出一个作为字符串的网络地址的点地址表示,返回一个代表该地址数值的整数。

     INET_NTOA(expr)给出一个数字网络地址(4或8比特),返回作为字符串的该地址的点地址表示。

4、加锁函数和解锁函数

     GET_LOCK(str,timeout)设法使用字符串str给定的名字得到一个锁,超时为timeout秒。若成功得到锁返回1;若操作超时返回0;若发生错误返回NULL。假如有一个用GET_LOCK()得到的锁,当执行RELEASE_LOCK()或断开连接时,这个锁就会解除。

     RELEASE_LOCK(str)解开被GET_LOCK()获取的、用字符串str锁命名的锁。若锁解开返回1;若该线程尚未创建锁返回0;若命名锁不存在返回NULL。

     IS_FREE_LOCK(str)检查名为str的锁是否可以使用。可以使用返回1;正在被使用返回0;出现错误返回NULL。

     IS_USED_LOCK(str)检查名为str的锁是否正在被使用。

5、重复执行指定操作的函数。

     BENCHMARK(count,expr)函数重复执行count次expr表达式。

6、改变数据类型的函数

     CAST(x,AS TYPE)和CONVERT(x,type)函数将一个类型的值转换为另一个类型的值,可以转换的的type有:BINARY、CHAR(n)、DATE、TIME、DATETIME、DECIMAL、SIGNED、UNSIGNED。

7、改变字符集的函数

      CONVERT(...  USING  ...)带有USING的CONVERT()函数被用来在不同的字符集之间转化数据。



你可能感兴趣的:(数据库)