MySql常用函数与实例(一)

-- 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 '


你可能感兴趣的:(笔记)