1、MySQL内置函数
SELECT执行函数,后面跟要执行的函数
CHAR_LENGTH(str)函数:返回字符串的字符长度
-- CHAR_LENGTH(str)函数:返回字符串的字符长度 SELECT CHAR_LENGTH('欢迎光临');
LENGTH(str)函数:返回字符串的字节长度
-- LENGTH(str)函数:返回字符串的字节长度 SELECT LENGTH('欢迎光临');
CONCAT(str1,str2,...)函数:拼接字符串
-- CONCAT(str1,str2,...)函数:拼接字符串 SELECT CONCAT('你好','欢迎光临');
CONCAT_WS(链接符,str1,str2,...)函数:自定义链接符,拼接字符串
-- CONCAT_WS(链接符,str1,str2,...)函数:自定义链接符,拼接字符串 SELECT CONCAT_WS('_','你好','欢迎光临');
CONV(N,from_base,to_base)函数:进制转换
-- CONV(N,from_base,to_base)函数:进制转换 SELECT CONV('a',16,2); -- 表示将 a 由16进制转换为2进制字符串表示
FORMAT(X,D)函数:将数字X 的格式写为'#,###,###.##',以四舍五入的方式保留小数点后 D 位, 并将结果以字符串的形式返回。若 D 为 0, 则返回结果不带有小数点,或不含小数部分。
-- FORMAT(X,D)函数:将数字X 的格式写为'#,###,###.##',以四舍五入的方式保留小数点后 D 位, 并将结果以字符串的形式返回。若 D 为 0, 则返回结果不带有小数点,或不含小数部分。 SELECT FORMAT(12332.1,4); -- 结果为: '12,332.1000'
INSERT(原始字符串,替换起始位置,替换长度,替换的新字符串)函数:在str的指定位置插入字符串
-- INSERT(原始字符串,替换起始位置,替换长度,替换的新字符串)函数:在str的指定位置插入字符串 SELECT INSERT('欢迎光临官方网站',5,2,'我们'); -- 返回:欢迎光临我们网站
其他函数
INSERT(str,pos,len,newstr) 在str的指定位置插入字符串 pos:要替换位置其实位置 len:替换的长度 newstr:新字符串 特别的: 如果pos超过原字符串长度,则返回原字符串 如果len超过原字符串长度,则由新字符串完全替换 INSTR(str,substr) 返回字符串 str 中子字符串的第一个出现位置。 LEFT(str,len) 返回字符串str 从开始的len位置的子序列字符。 LOWER(str) 变小写 UPPER(str) 变大写 LTRIM(str) 返回字符串 str ,其引导空格字符被删除。 RTRIM(str) 返回字符串 str ,结尾空格字符被删去。 SUBSTRING(str,pos,len) 获取字符串子序列 LOCATE(substr,str,pos) 获取子序列索引位置 REPEAT(str,count) 返回一个由重复的字符串str 组成的字符串,字符串str的数目等于count 。 若 count <= 0,则返回一个空字符串。 若str 或 count 为 NULL,则返回 NULL 。 REPLACE(str,from_str,to_str) 返回字符串str 以及所有被字符串to_str替代的字符串from_str 。 REVERSE(str) 返回字符串 str ,顺序和字符顺序相反。 RIGHT(str,len) 从字符串str 开始,返回从后边开始len个字符组成的子序列 SPACE(N) 返回一个由N空格组成的字符串。 SUBSTRING(str,pos) , SUBSTRING(str FROM pos) SUBSTRING(str,pos,len) , SUBSTRING(str FROM pos FOR len) 不带有len 参数的格式从字符串str返回一个子字符串,起始于位置 pos。带有len参数的格式从字符串str返回一个长度同len字符相同的子字符串,起始于位置 pos。 使用 FROM的格式为标准 SQL 语法。也可能对pos使用一个负值。假若这样,则子字符串的位置起始于字符串结尾的pos 字符,而不是字符串的开头位置。在以下格式的函数中可以对pos 使用一个负值。 mysql> SELECT SUBSTRING('Quadratically',5); -> 'ratically' mysql> SELECT SUBSTRING('foobarbar' FROM 4); -> 'barbar' mysql> SELECT SUBSTRING('Quadratically',5,6); -> 'ratica' mysql> SELECT SUBSTRING('Sakila', -3); -> 'ila' mysql> SELECT SUBSTRING('Sakila', -5, 3); -> 'aki' mysql> SELECT SUBSTRING('Sakila' FROM -4 FOR 2); -> 'ki' TRIM([{BOTH | LEADING | TRAILING} [remstr] FROM] str) TRIM(remstr FROM] str) 返回字符串 str , 其中所有remstr 前缀和/或后缀都已被删除。若分类符BOTH、LEADIN或TRAILING中没有一个是给定的,则假设为BOTH 。 remstr 为可选项,在未指定情况下,可删除空格。 mysql> SELECT TRIM(' bar '); -> 'bar' mysql> SELECT TRIM(LEADING 'x' FROM 'xxxbarxxx'); -> 'barxxx' mysql> SELECT TRIM(BOTH 'x' FROM 'xxxbarxxx'); -> 'bar' mysql> SELECT TRIM(TRAILING 'xyz' FROM 'barxxyz'); -> 'barx'
文本函数
函数 | 用法 | 描述 |
CONCAT() | CONCAT(x,y,...) | 创建形如xy的新字符串 |
LENGTH() | LENGTH(column) | 返回列中储存的值的长度 |
LEFT() | LEFT(column,x) | 从列的值中返回最左边的x个字符 |
RIGHT() | RIGHT(column,x) | 从列的值中返回最右边的x个字符 |
TRIM() | TRIM(column) | 从存储的值删除开头和结尾的空格 |
UPPER() | UPPER(column) | 把存储的字符串全部大写 |
LOWER() | LOWER(column) | 把存储的字符串全部小写 |
SUBSTRING() | SUBSTRING(column, start, length) | 从column中返回开始start的length个字符(索引从0开始) |
MD5() | MD5(column) | 把储存的字符串用MD5加密 |
SHA() | SHA(column) | 把存储的字符串用SHA加密 |
数字函数
函数 | 用法 | 描述 |
ABS() | ABS(x) | 返回x的绝对值 |
CEILING() | CEILING(x) | 返回x的值的最大整数 |
FLOOR() | FLOOR(x) | 返回x的整数 |
ROUND() | ROUND(x) | 返回x的四舍五入整数 |
MOD() | MOD(x) | 返回x的余数 |
RNAD() | RNAD() | 返回0-1.0之间随机数 |
FORMAT() | FORMAT(x,y) | 返回一个格式化后的小数 |
SIGN() | SIGN(x) | 返回一个值,正数(+1),0,负数(-1) |
SQRT() | SQRT(x) | 返回x的平方根 |
日期和时间函数
函数 | 用法 | 描述 |
HOUR() | HOUR(column) | 只返回储存日期的小时值 |
MINUTE() | MINUTE(column) | 只返回储存日期的分钟值 |
SECOND() | SECOND(column) | 只返回储存日期的秒值 |
DAYNAME() | DAYNAME(column) | 返回日期值中天的名称 |
DAYOFMONTH() | DAYOFMONTH(column) | 返回日期值中当月第几天 |
MONTHNAME() | MONTHNAME(column) | 返回日期值中月份的名称 |
MONTH() | MONTH(column) | 返回日期值中月份的数字值 |
YEAR() | YEAR(column) | 返回日期值中年份的数字值 |
CURDATE() | CURDATE() | 返回当前日期 |
CURTIME() | CURTIME() | 返回当前时间 |
NOW() | NOW() | 返回当前时间和日期 |
格式化日期和时间(DATE_FORMAT()和TIME_FORMAT())
名词 | 用法 | 示例 |
%e | 一月中的某天 | 1~31 |
%d | 一月中的某天,两位 | 01~31 |
%D | 带后缀的天 | 1st~31st |
%W | 周日名称 | Sunday~Saturday |
%a | 简写的周日名称 | Sun-Sat |
%c | 月份编号 | 1~12 |
%m | 月份编号,两位 | 01~12 |
%M | 月份名称 | January~December |
%b | 简写的月份名称 | Jan~Dec |
%Y | 年份 | 2002 |
%y | 年份,两位 | 02 |
%l | 小时 | 1~12 |
%h | 小时,两位 | 01~12 |
%k | 小时,24小时制 | 0~23 |
%H | 小时,24小制度,两位 | 00~23 |
%i | 分钟 | 00~59 |
%S | 秒 | 00~59 |
%r | 时间 | 8:17:02 PM |
%T | 时间,24小时制 | 20:17:02 PM |
%p | 上午或下午 | AM或PM |
2、自定义函数
create function 创建函数
-- create function 创建函数 -- create function 函数名称 (形式参数名称,形式参数类型) -- returns int 返回整数类型 -- BEGIN 函数内容开始 -- 函数内容 -- END 函数内容结束 delimiter $$ DROP function if EXISTS f1; -- 判断这个函数如果存在删除 create function f1( -- 创建函数,接收两个整数类型参数 i1 int, i2 int) returns int -- 返回整数类型 BEGIN declare num int; -- 定义num变量,整数类型 set num = i1 + i2; -- 将传值相加后,赋值给num变量 return(num); -- 返回num变量 END $$ delimiter ;
函数以创建
执行自定义函数
-- 执行自定义函数 SELECT f1(5,6); -- 返回11
将函数放在查询语句里,将函数返回结果与查询语句返回结果组合
-- 执行自定义函数 SELECT f1(5,6),id,yhm,xb,nl FROM usr;
将函数放在查询语句里,函数的参数如果是写的某个字段,那么这个字段的值将传入函数里执行
-- 执行自定义函数 SELECT f1(5,nl),id,yhm,xb,nl FROM usr; -- 函数的参数如果是写的nl字段,那么这个字段的值将传入函数里执行
删除函数
drop function 删除函数,后面跟要删除的函数名称
-- drop function 删除函数,后面跟要删除的函数名称 drop function f1;
pymysql模块,执行函数
注意:函数与存储过程的区别
存储过程是:CREATE PROCEDURE 创建的
函数时:create function 创建的
存储过程是:CALL 执行的
函数时:SELECT 执行的
函数里:不支持SQL语句【重点】
存储过程里:支持SQL语句【重点】