二.十九 字符串从开始位置截取 substring_index(str,delimiter,num)
截取字符串 str, 从第 num位置开始的, 以delimiter 进行截取。 如果num 为正数,就截取后展示左边的全部内容。
如果num为负数,就倒着截取,然后展示右边的全部内容。 注意,都不包括分隔符这个内容。
如果str字符串里面没有这个分隔符,就返回str
如一个ip 地址, 192.168.1.101 进行截取。
select substring_index('192.168.1.101','.',1) as 'a',substring_index('192.168.1.101','.',3) as 'b', substring_index('192.168.1.101','.',-1) as 'c',substring_index('192.168.1.101','.','-2') as 'd', substring_index('192.168.1.101','+',1) as 'e',substring_index('192.168.1.101','+',-1) as 'f';
二.二十 字符串反转 reverse(s1)
将字符串反转
select reverse('abcdefg'),reverse('两个蝴蝶飞'),reverse('1234321');
二.二十一 最开始出现子字符串的位置 instr(str1,str2), locate(str2,str1) 与 position(str2 in str1)
三者的作用是一样的,都是查询子字符串最先出现的位置。
注意,str1与str2的位置。 instr与 java中的相同, locate() 与position的顺序正好相反。
如果没有找到,返回 0. 不是传说中的-1.
select instr('abcde','bcd'),locate('a','abcdefg'),position('cd' in 'abdefg');
二.二十二 指定位置的字符串 ELT(n,str1,str2,str3…)
如果n=1, 就返回str1, n=2 返回 str2, n=3返回str3, 如果n<=0,那么返回null, 如果n> 列表的字符串数目, 也返回null
select elt(1,'a','b','c'),elt(2,'ab','bcd','c'),elt(0,'ab','ad');
二.二十三 指定字符串的位置 FIELD(s,s1,s2,s3…)
如果s=s1,就返回1, 如果s=s2,就返回2, 如果s=s3 就返回3, 如果找不到,就返回0. 如果s为null, 那么也返回0. 0表示没有找到。
select field('a','abc','a','ac'), field('ab','ab','abc','ab'),field('a','ab','b','c'),field(null,'a','b');
二.二十四 集合子串的位置 find_in_set(s1,s2)
s2 是一个字符串,用, 进行拼接的。 如果s2为null,如果没有找到s1,就返回0. 如果s1中值为null,就返回null.
select find_in_set('abc','a,abc,abc,ac,bc'),find_in_set('a','a,b,c,d'), find_in_set('a','ab,ac,ad'),find_in_set('a','a,null,b,ab'), find_in_set('a','null,a,b,ab'),find_in_set(null,'null,ac,b,ab');
注意,并不是s2中有值为null,就直接返回null了。
二.二十五 选择字符串 make_set(x,s1,s2,s3…)
首先将 数值x 变成二进制数, 将列表值按照 s1,s2,s3…的顺序排序。 变成的二进制数依次排列,如果是1,就取出来,如果是0,就跳过。 取出来的值,如果是null,就跳过不管。
select make_set(1,'abc','a','b'),make_set(3,'a','c','b'),make_set(5,'a','c','b','d'), make_set(5,'a','b',null,'c');
1 二进制是 1, 放置在 ‘abc’,‘a’,‘b’ 里面, 取出 第一个 ‘abc’
3 二进制是11, 放置在 ‘a’,‘c’,‘b’, 取出 第一个a,和第二个c, 为 a,c
5 二进制是101, 放置在 ‘a’,‘c’,‘b’,‘d’, 取出第一个 a, 第二位是0,不取出, 第三位是1, 取出第三位的b, 为a,b
5 二进制是101, 放置在 ‘a’,‘b’,null,‘c’ ,取出第一个a,第二位是0,不取出, 第三位是1,取出null, 但null值跳过,不取,所以为 a.
二.二十六 格式化函数 format(n,d,locale)
locale默认是 ‘en_us’ . d 表示的是小数点位数。
将一个数值类型的数,格式化保留几位小数。 以###,###.## 的形式展示, 千分位展示。
n 即可以是数值类型,也可以是 数值的字符串。
select format(23,2),format('12345',3),format('123455',2),format(123455,2);
二.二十七 ASCII 码函数 ascii(s1)
字符串s1的第一个字符的 ascii码的值。只算第一个字符值。
select ascii('abc'),ascii('a'),ascii('A');
谢谢!!!