当前位置: 澳门新濠3559 > 数据库 > 正文

可以截取特定位置的字符串(主键b),以格式返

时间:2019-10-12 05:05来源:数据库
以下列出mysql函数的使用,并不完全,涉及到多少写多少。 文中给大家介绍MySQL 字符串截取相关函数,具体内容如下所示: 1、字符串函数 函数简介:   在工作中,可能需要将某些字段

以下列出mysql函数的使用,并不完全,涉及到多少写多少。

文中给大家介绍MySQL 字符串截取相关函数,具体内容如下所示:

1、字符串函数

函数简介:

 

在工作中,可能需要将某些字段按某个分割符组成一个字符串作为字段值存取到数据库表中,比如某个任务对应三个结果,分别存储在不同的数据表中,这时可以将这三个不同表的主键按照约定的顺序进行组合(主键a:主键b:主键c)。当需要分别去查任务对应类别的详情信息时,可以截取特定位置的字符串(主键b) join 表b进行操作。正好最近也遇到这块操作,特意将 MySQL 字符串截取的相关函数做一个梳理,以便今后回顾。

ascii可以截取特定位置的字符串(主键b),以格式返回((first byte ascii code)。(str)

SUBSTRING(str,pos) , SUBSTRING(str FROM pos) SUBSTRING(str,pos,len) , SUBSTRING(str FROM pos FOR len)

length(str):返回字符串(str)的字符长度。一个汉字算三个字符,一个数字或字母算一个字符。

一、left(str, len)

返回字符串str的第一个字符的ascii值(str是空串时返回0)

不带有len 参数的格式从字符串str返回一个子字符串,起始于位置 pos。带有len参数的格式从字符串str返回一个长度同len字符相同的子字符串,起始于位置 pos。 使用 FROM的格式为标准 SQL 语法。也可能对pos使用一个负值。假若这样,则子字符串的位置起始于字符串结尾的pos 字符,而不是字符串的开头位置。在以下格式的函数中可以对pos 使用一个负值。

select length('测试');        -- 6
select length('123abc');    -- 6

返回字符串 str 自左数的 len 个字符。如果任一参数为 NULL,则返回 NULL。

mysql> select ascii('2');

 

char_length(str):返回字符串(str)的字符长度。一个汉字、数字或字母都算一个字符。

mysql> select left('shinejaie', 5);
 --------------------------------------------------------- 
| left('shinejaie', 5)                  |
 --------------------------------------------------------- 
| shine                          |
 --------------------------------------------------------- 
1 row in set (0.00 sec)

-> 50

 

select char_length('测试');        -- 2
select char_length('123abc');    -- 6

二、right(str, len)

mysql> select ascii(2);

SUBSTRING_INDEX(str,delim,count) 按关键字截取字符串

返回从字符串str分隔符 delim 在计数发生前的子字符串。如果计数是正的,则返回一切到最终定界符(从左边算起)的左侧。如果count是负数,则返回一切最终定界符(从右边算起)的右侧。SUBSTRING_INDEX() 搜寻在delim时进行区分大小写的匹配

select (hostname,'wb',-1) from instances;  查找instances表中hostname的字段,过滤从第一个wb子串以后的字符串

说明:substring_index(被截取字段,关键字,关键字出现的次数) 
例:select substring_index("blog.jb51.net","。",2) as abstract from my_content_t 
结果:blog.jb51 
(注:如果关键字出现的次数是负数 如-2 则是从后倒数,到字符串结束) 

 

left(str, length) 从左开始截取字符串 
说明:left(被截取字段,截取长度) 
例:select left(content,200) as abstract from my_content_t 

 

right(str, length) 从右开始截取字符串 

说明:right(被截取字段,截取长度) 
例:select right(content,200) as abstract from my_content_t 

substring(str, pos, length)  截取字符串  也可以 substring(str, pos) 

说明:substring(被截取字段,从第几位开始截取) 
substring(被截取字段,从第几位开始截取,截取长度) 
例:select substring(content,5) as abstract from my_content_t 
select substring(content,5,200) as abstract from my_content_t 
(注:如果位数是负数 如-5 则是从后倒数位数,到字符串结束或截取的长度) 

 

instr(str,substr):返回指定字符串(substr)在字符串(str)中的第一次出现的位置。如果未找到则返回0。

返回 str 右边末 len 位的字符。如果有的参数是 NULL 值,则返回 NULL。

-> 50

select instr('football','f');    -- 1
select instr('football','o');    -- 2
select instr('football','ba');    -- 5
mysql> select right('shinejaie', 4);
 --------------------------------------------------------- 
| right('shinejaie', 4)                  |
 --------------------------------------------------------- 
| jaie                          |
 --------------------------------------------------------- 
1 row in set (0.00 sec)

mysql> select ascii('dete');

locate(substr,str):返回指定字符串(substr)在字符串(str)中的第一次出现的位置。如果未找到则返回0。

三、substring_index(str, delim, count)

-> 100

select locate('ba','football');        -- 5
select locate('o','football');        -- 2

返回 str 中第 count 次出现的分隔符 delim 之前的子字符串。如果 count 为正数,将最后一个分隔符左边(因为是从左数分隔符)的所有内容作为子字符串返回;如果 count 为负值,返回最后一个分隔符右边(因为是从右数分隔符)的所有内容作为子字符串返回。在寻找分隔符时,函数对大小写是敏感的。如果在字符串 str 中找不到 delim 参数指定的值,就返回整个字符串。

ord(str)

locate(substr,str,pos):返回指定字符串(substr)在字符串(str)中的第(pos)位之后第一次出现的位置。如果未找到则返回0。

mysql> select substring_index('home.cnblogs.com', '.', 2);
 --------------------------------------------------------- 
| substring_index('home.cnblogs.com', '.', 2)       |
 --------------------------------------------------------- 
| home.cnblogs                      |
 --------------------------------------------------------- 
1 row in set (0.00 sec)
mysql> select substring_index('home.cnblogs.com', '/', 2);
 --------------------------------------------------------- 
| substring_index('home.cnblogs.com', '/', 2)       |
 --------------------------------------------------------- 
| home.cnblogs.com                    |
 --------------------------------------------------------- 
1 row in set (0.00 sec)

如果字符串str句首是单字节返回与ascii()函数返回的相同值。

select locate('o','football',3);    -- 3
select locate('o','football',4);    -- 0

四、substring() 与 substr() ---> substring(str, pos)、substring(str from pos)、substring(str, pos, len)、substring(str from pos for len)

如果是一个多字节字符,以格式返回((first byte ascii code)*256 (second byte ascii code))[*256 third byte asciicode...]

concat(str1,str2,...):澳门新濠3559,返回所有参数拼接起来产生的字符串。如果有任何一个参数位null,则返回null。

在以上4种函数变种形式中,没有 len 参数的函数形式会返回自 str 中位置 pos 处之后的子字符串;有 len 参数的函数形式会返回自 str 中位置 pos 处之后,长度为 len 的子字符串。使用 FROM 的函数形式则是采用的标准的 SQL 语法。pos 参数也可能取负值,在这种情况下,取字符串的方式是从字符串 str 的末尾向前(而非从前往后),从这种逆向顺序的 pos 处开始取字符串。另外,负值的 pos 参数可用于任何形式的 substring() 函数中。

mysql> select ord('2');

select concat('w','h','at');        -- what
select concat('w','h','at',null);    -- null
mysql> select substring('shinejaie', 6);
 --------------------------------------------------------- 
| substring('shinejaie',6)                |
 --------------------------------------------------------- 
| jaie                          |
 --------------------------------------------------------- 
1 row in set (0.00 sec)
mysql> select substr('shinejaie' from 6);
 --------------------------------------------------------- 
| substr('shinejaie' from 6)               |
 --------------------------------------------------------- 
| jaie                          |
 --------------------------------------------------------- 
1 row in set (0.00 sec)
mysql> select substring('shinejaie', -9, 5);
 --------------------------------------------------------- 
| substring('shinejaie', -9, 5)              |
 --------------------------------------------------------- 
| shine                          |
 --------------------------------------------------------- 
1 row in set (0.00 sec)

-> 50

concat_ws(separator,str1,str2,...):返回所有参数拼接起来产生的字符串,第一个参数作为后面参数拼接的分隔符。如果分隔符为null,则返回null,除分隔符外的其他参数为null,则忽略。

五、trim([{both | leading | trailing} [remstr] form] str)

conv(n,from_base,to_base)

select concat_ws(',','first','second','third');    -- first,second,third
select concat_ws(';','11','22','33',null);        -- 11;22;33
select concat_ws(null,'11','22','33',null);        -- null

将字符串 str去除 remstr 所指定的前缀或后缀,返回结果字符串。如果没有指定标识符both、leading,或trailing,则默认采用 both,即将前后缀都删除。remstr 其实是个可选参数,如果没有指定它,则删除的是空格。

对数字n进制转换,并转换为字串返回(任何参数为null时返回null,进制范围为2-36进制,当to_base是负数时n作为有符号数否则作无符号数,conv以64位点精度工作)

left(str,length):从字符串(str)左起第一个字符开始,返回指定长度(length)的子字符串。

mysql> select trim(' shinejaie  ');
 --------------------------------------------------------- 
| trim(' shinejaie  ')                 |
 --------------------------------------------------------- 
| shinejaie                        |
 --------------------------------------------------------- 
1 row in set (0.00 sec)
mysql> select trim(leading 'cn_' from 'cn_shinejaiecn_');
 --------------------------------------------------------- 
| trim(leading 'cn_' from 'cn_shinejaiecn_')       |
 --------------------------------------------------------- 
| shinejaiecn_                      |
 --------------------------------------------------------- 
1 row in set (0.00 sec)
mysql> select trim(both 'cn_' from 'cn_shinejaiecn_');
 --------------------------------------------------------- 
| trim(both 'cn_' from 'cn_shinejaiecn_')         |
 --------------------------------------------------------- 
| shinejaie                        |
 --------------------------------------------------------- 
1 row in set (0.00 sec)
mysql> select trim(trailing 'cn_' from 'cn_shinejaiecn_');
 --------------------------------------------------------- 
| trim(trailing 'cn_' from 'cn_shinejaiecn_')       |
 --------------------------------------------------------- 
| cn_shinejaie                      |
 --------------------------------------------------------- 
1 row in set (0.00 sec)

mysql> select conv("a",16,2);

select left('mysql',2);        -- my

总结

-> '1010'

right(str,length):从字符串(str)右起第一个字符开始,返回指定长度(length)的子字符串。

以上所述是小编给大家介绍的MySQL 字符串截取相关函数小结,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

mysql> select conv("6e",18,8);

select right('mysql',3);    -- sql

您可能感兴趣的文章:

  • MySQL 截取字符串函数的sql语句
  • MySQL截取和拆分字符串函数用法示例
  • mysql截取的字符串函数substring_index的用法
  • Mysql字符串截取函数SUBSTRING的用法说明
  • mysql 截取指定的两个字符串之间的内容

-> '172'

substring(str,pos):返回字符串(str)从第(pos)个字符开始之后的所有字符组成的子字符串。pos为正数,从左起;pos为负数,从右起。

mysql> select conv(-17,10,-18);

select substring('everyone',3);        -- eryone
select substring('everyone',-3);    -- one

-> '-h'

substring(str,pos,length):返回字符串(str)从第(pos)个字符开始,之后指定长度(length)的子字符串。pos为正数,从左起;pos为负数,从右起。

mysql> select conv(10 "10" '10' 0xa,10,10);

select substring('everyone',1,5);    -- every
select substring('everyone',-3,3);    -- one

-> '40'

substring_index(str,delim,count):返回从字符串(str)第一个字符开始,到字符串中第(count)次出现的分隔符(delim)之间的子字符串。count为正数,从左起;count为负数,从右起。
如果在字符串(str)中未找到分隔符(delim)的位置,或者未找到指定次数(count)出现的分隔符的位置时,则返回整个字符串。分隔符(delim)不一定为符号,也可以为其它自定义字符。

bin(n)

select substring_index('11;22;33;',';',2);    -- 11;22
select substring_index('11;22;33;',',',2);    -- 11;22;33;
select substring_index('11;22;33;',';',-2);    -- 33;

把n转为二进制值并以字串返回(n是bigint数字,等价于conv(n,10,2))

convert(value,type):类型或格式转换。可转换的类型是有限制的,可以是以下类型中之一:binary、char(n)、date、time、datetime、decimal、signed、unsigned。

mysql> select bin(12);

-- 数字转换为字符串
select convert(33,char);    -- 33(字符串类型)
-- 字符串转换为数字
select convert('333',signed);    -- 333(数字值类型)

-- 把字符串编码格式转换为Unicode编码格式
select convert('一' using ucs2);
-- 把字符串编码格式转换为UTF8编码格式
select convert('abc' using utf8);
-- 把字符串编码格式转换为GBK编码格式
select convert('一' using gbk);
-- 把字符串编码格式转换为GB2312编码格式
select convert('一' using gb2312);

-> '1100'

cast(value as type):类型转换。可转换的类型是有限制的,可以是以下类型中之一:binary、char(n)、date、time、datetime、decimal、signed、unsigned。

oct(n)

-- 数字转换为字符串
select cast(333 as char);
-- 字符串转换为数字
select cast('3333' as signed);

把n转为八进制值并以字串返回(n是bigint数字,等价于conv(n,10,8))

hex(str):把指定的字符串(str)转换为16进制值。

mysql> select oct(12);

-- 把字符串转换为16进制值
select hex(convert('一' using ucs2));    -- 4E00

-> '14'

unhex(str):把指定的16进制字符串(str)转换为字符串。

hex(n)

-- 把16进制值转换为字符串
select convert(unhex('4E00') using ucs2);    -- 一

把n转为十六进制并以字串返回(n是bigint数字,等价于conv(n,10,16))

ord(str):把指定的字符串(str)转换为ASCII值。

mysql> select hex(255);

-- 把字符串转换为ASCII值
select ord(convert('A' using ucs2));    -- 65
select ord(convert('一' using ucs2));    -- 19968

-> 'ff'

ascii(str):把指定的字符串(str)转换为ASCII值。

char(n,...)

-- 把字符串转换为ASCII值
select ascii(convert('A' using utf8));    -- 65

返回由参数n,...对应的ascii代码字符组成的一个字串(参数是n,...是数字序列,null值被跳过)

 

mysql> select char(77,121,83,81,'76');

-> 'mysql'

mysql> select char(77,77.3,'77.3');

-> 'mmm'

concat(str1,str2,...)

把参数连成一个长字符串并返回(任何参数是null时返回null)

mysql> select concat('my', 's', 'ql');

-> 'mysql'

mysql> select concat('my', null, 'ql');

-> null

mysql> select concat(14.3);

-> '14.3'

length(str)

octet_length(str)

char_length(str)

character_length(str)

返回字符串str的长度(对于多字节字符char_length仅计算一次)

mysql> select length('text');

-> 4

mysql> select octet_length('text');

-> 4

locate(substr,str)

position(substr in str)

返回字符串substr在字符串str第一次出现的位置(str不包含substr时返回0)

mysql> select locate('bar', 'foobarbar');

-> 4

mysql> select locate('xbar', 'foobar');

-> 0

locate(substr,str,pos)

返回字符串substr在字符串str的第pos个位置起第一次出现的位置(str不包含substr时返回0)

mysql> select locate('bar', 'foobarbar',5);

-> 7

instr(str,substr)

返回字符串substr在字符串str第一次出现的位置(str不包含substr时返回0)

mysql> select instr('foobarbar', 'bar');

-> 4

mysql> select instr('xbar', 'foobar');

-> 0

lpad(str,len,padstr)

用字符串padstr填补str左端直到字串长度为len并返回

mysql> select lpad('hi',4,'??');

-> '??hi'

rpad(str,len,padstr)

用字符串padstr填补str右端直到字串长度为len并返回

mysql> select rpad('hi',5,'?');

-> 'hi???'

left(str,len)

返回字符串str的左端len个字符

mysql> select left('foobarbar', 5);

-> 'fooba'

right(str,len)

返回字符串str的右端len个字符

mysql> select right('foobarbar', 4);

-> 'rbar'

substring(str,pos,len)

substring(str from pos for len)

mid(str,pos,len)

返回字符串str的位置pos起len个字符mysql> select substring('quadratically',5,6);

-> 'ratica'

substring(str,pos)

substring(str from pos)

返回字符串str的位置pos起的一个子串

mysql> select substring('quadratically',5);

-> 'ratically'

mysql> select substring('foobarbar' from 4);

-> 'barbar'

substring_index(str,delim,count)

返回从字符串str的第count个出现的分隔符delim之后的子串

(count为正数时返回左端,否则返回右端子串)

mysql> select substring_index('www.mysql.com', '.', 2);

-> 'www.mysql'

mysql> select substring_index('www.mysql.com', '.', -2);

-> 'mysql.com'

ltrim(str)

返回删除了左空格的字符串str

mysql> select ltrim('  barbar');

-> 'barbar'

rtrim(str)

返回删除了右空格的字符串str

mysql> select rtrim('barbar   ');

-> 'barbar'

trim([[both | leading | trailing] [remstr] from] str)

返回前缀或后缀remstr被删除了的字符串str(位置参数默认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'

soundex(str)

返回str的一个同音字符串(听起来“大致相同”字符串有相同的

同音字符串,非数字字母字符被忽略,在a-z外的字母被当作元音)

mysql> select soundex('hello');

-> 'h400'

mysql> select soundex('quadratically');

-> 'q36324'

space(n)

返回由n个空格字符组成的一个字符串

mysql> select space(6);

-> '      '

replace(str,from_str,to_str)

用字符串to_str替换字符串str中的子串from_str并返回

mysql> select replace('www.mysql.com', 'w', 'ww');

-> 'wwwwww.mysql.com'

repeat(str,count)

返回由count个字符串str连成的一个字符串(任何参数为null时

返回null,count<=0时返回一个空字符串)

mysql> select repeat('mysql', 3);

-> 'mysqlmysqlmysql'

reverse(str)

颠倒字符串str的字符顺序并返回

mysql> select reverse('abc');

-> 'cba'

insert(str,pos,len,newstr)

把字符串str由位置pos起len个字符长的子串替换为字符串

newstr并返回

mysql> select insert('quadratic', 3, 4, 'what');

-> 'quwhattic'

elt(n,str1,str2,str3,...)

返回第n个字符串(n小于1或大于参数个数返回null)

mysql> select elt(1, 'ej', 'heja', 'hej', 'foo');

-> 'ej'

mysql> select elt(4, 'ej', 'heja', 'hej', 'foo');

-> 'foo'

field(str,str1,str2,str3,...)

返回str等于其后的第n个字符串的序号(如果str没找到返回0)

mysql> select field('ej', 'hej', 'ej', 'heja', 'hej',

'foo');

-> 2

mysql> select field('fo', 'hej', 'ej', 'heja', 'hej',

'foo');

-> 0

find_in_set(str,strlist)

返回str在字符串集strlist中的序号(任何参数是null则返回

null,如果str没找到返回0,参数1包含","时工作异常)

mysql> select find_in_set('b','a,b,c,d');

-> 2

make_set(bits,str1,str2,...)

把参数1的数字转为二进制,假如某个位置的二进制位等于1,对应

位置的字串选入字串集并返回(null串不添加到结果中)

mysql> select make_set(1,'a','b','c');

-> 'a'

mysql> select make_set(1 | 4,'hello','nice','world');

-> 'hello,world'

mysql> select make_set(0,'a','b','c');

-> ''

export_set(bits,on,off,[separator,[number_of_bits]])

按bits排列字符串集,只有当位等于1时插入字串on,否则插入

off(separator默认值",",number_of_bits参数使用时长度不足补0

而过长截断)

mysql> select export_set(5,'y','n',',',4)

-> y,n,y,n

lcase(str)

lower(str)

返回小写的字符串str

mysql> select lcase('quadratically');

-> 'quadratically'

ucase(str)

upper(str)

返回大写的字符串str

mysql> select ucase('quadratically');

-> 'quadratically'

load_file(file_name)

读入文件并且作为一个字符串返回文件内容(文件无法找到,路径

不完整,没有权限,长度大于max_allowed_packet会返回null)

mysql> update table_name set blob_column=load_file

("/tmp/picture") where id=1;

编辑:数据库 本文来源:可以截取特定位置的字符串(主键b),以格式返

关键词: 澳门新濠3559