-- 2018.4.10.日报
-- 二.mysql常用函数与实例(一)
-- 1.concat(s1,s2...)
-- 将参数拼接成一个字符串,数字会转换成等价的字符串
-- 如果参数为null,会return null ,但是参数不能为空
SELECT CONCAT('I',' am ',' wdt ',2.0);
SELECT CONCAT('my',' name',' is ', 'lxd');
SELECT CONCAT(); -- 出错!
SELECT CONCAT(NULL,NULL); -- return null
-- 2.concat_ws(seprator,str1,str2...)
-- 将参数拼接成一个字符串,并以seprator字符隔开,其它参数null,会被忽略跳过,
-- 但如果seprator为null,则会return null
-- 如果seprator为空串,那就与concat等价
SELECT CONCAT_WS(',','my','name','is','wdt',2.0);
SELECT CONCAT_WS('','my','name','is','lxd');
-- 3.elt(N,str1,str2...)与field(str,str1,str2,str3..)
-- 这两个互为反运算
-- elt(N,str1,str2...)返回第N个参数,如果N小于1或大于参数个数,则返回NULL,
-- field(str,str1,str2,str3..)返回str在后面参数中的位置,没找到return 0;
SELECT ELT(3,'taobao','jingdong','wdt','suning'); -- return wdt
SELECT ELT(5,'taobao','jingdong','wdt','suning'); -- return null
SELECT FIELD('wdt','taobao','jingdong','wdt','suning');-- return 3
SELECT FIELD('wdt4.0','taobao','jingdong','wdt3.0','suning');-- return 0
-- 4.find_in_set(str,strlist)
-- 找出字符串str在字符串列表strlist中的位置
-- 找不到返回0 ,参数为null返回null,str如果包含,逗号,结果不对
SELECT FIND_IN_SET('wdt2.0','wdt1.0,wdt2.0,wdt3.0,wdt4.0'); -- return 2
SELECT FIND_IN_SET('wdt5.0','wdt1.0,wdt2.0,wdt3.0,wdt4.0'); -- return 0
SELECT FIND_IN_SET(NULL,'wdt1.0,wdt2.0,wdt3.0,wdt4.0'); -- return null
SELECT FIND_IN_SET('wdt2.0,','wdt1.0,wdt2.0,,wdt3.0,wdt4.0'); -- return 0
-- 5.length(str) 与 char_length(str)
-- length(str)返回str长度,是以字节为单位
-- char_length(str)也是返回str的长度,是以字符为单位
SET @str = '旺店通';
SELECT LENGTH(@str); -- return 9 utf8一个汉字 = 3个字节
SELECT CHAR_LENGTH(@str); -- return 3
-- 6.like(str) 简单模式匹配
SELECT @str LIKE('旺店%');
-- 7.load_file(str)
-- 读取文件中的数据,str为文件名 类似于load data infile
SHOW GLOBAL VARIABLES LIKE '%secure%'; -- 先查看默认允许导入导出的路径,可修改
SET @file_name1 = 'D:/wamp/tmp/test.txt' ;
SET @file_name2 = 'D:/wamp/tmp/test2.txt';
SELECT LOAD_FILE(@file_name);
SELECT * FROM test_goods INTO OUTFILE'D:/wamp/tmp/test2.txt';
SELECT LOAD_FILE(@file_name2);
LOAD_FILE(@file_name2) INTO TABLE test_goods_copy;
LOAD DATA INFILE"D:/wamp/tmp/test2.txt" INTO TABLE test_goods_copy;
SELECT * FROM test_goods_copy;
-- 8. locate(substr,str)与locate(substr,str,pos)
-- 返回字串substr 在原串中第一次出现的位置,
-- pos是指定起始位置,locate(substr,str)等同于instr(str,substr)
SET @str_sub = 'wdt';
SET @str_f = 'I like wdt wdt1.0 wdt2.0 wdt3.0';
SELECT LOCATE(@str_sub,@str_f); -- return 8
SELECT LOCATE(@str_sub,@str_f,13); -- return 19
SELECT INSTR(@str_f,@str_sub); -- return 8 注意参数位置相反
-- 9. make_set(bits,str1,str2,str3...)
-- 根据二进制bits的位选出相应的字符串组成一个字符集返回,
-- 参数的顺序是从低位到高位依次递推的
SELECT MAKE_SET(3,'wdt1.0','wdt2.0','wdt3.0','wdt4.0'); -- return wdt1.0,wdt2.0
-- 10.quote(str)
-- 引用字符串str,返回完全转义的字符串
SELECT QUOTE('wdt'); -- return 'wdt';
SELECT LENGTH(QUOTE('wdt')); -- return 5;
SELECT LENGTH(QUOTE(NULL)); -- return 4
SELECT QUOTE(NULL); -- return null
-- 11.replace(str,from_str,to_str)
-- 将字符串str中的所有from_str替换成to_str,
-- 并返回替换后的字符串
SET @str_replace = 'wdt2.0';
SET @from_str = '2.0';
SET @to_str = '3.0';
SELECT REPLACE(@str_replace,@from_str,@to_str); -- return wdt3.0;
SELECT@str_replace; -- return wdt.2.0; 函数不能通过形参改变实参的值
-- 12.substring(str,pos)= substring(str from pos),substring(str,pos,len) = substring(str from pos for len)
-- 就是从字符串str中截取字串并返回字串,pos指定起始位置,len指定长度,len缺省则截止串末尾
SELECT SUBSTRING('my name is Wdjygs',12); -- return Wdjygs;
SELECT SUBSTRING('my name is Wdjygs',4,4); -- return name;
-- 13.ltrim(str),rtrim(str),trim(str)
-- 截掉字符串中前后空格,返回截后结果LTRIM截左边RTRIM截右边
-- TRIM则前后都截 而且TRIM可以指定截取的字符,默认才是空格
SELECT LTRIM(' wdt3.0 '); -- return 'wdt3.0 '
SELECT RTRIM(' wdt3.0 '); -- return ' wdt3.0'
SELECT TRIM(' wdt3.0 '); -- return 'wdt3.0'
SELECT TRIM(LEADING'x' FROM'xx wdt3.0 xx'); -- return ' wdt3.0 xx'
SELECT TRIM(BOTH'x' FROM'xx wdt3.0 xx'); -- return ' wdt3.0 '
SELECT TRIM(TRAILING'x' FROM'xx wdt3.0 xx'); -- return 'xx wdt3.0 '