Mysql字符串处理函数详细介绍,demo案例


SELECT `id`,`nickName`,`headimgurl`,INSERT(`mobile`,4,4,'****') FROM `wx_yaoyao` WHERE ( id in(303,271,156,287,255) )
SELECT `id`,`nickName`,`headimgurl`,INSERT(`mobile`,4,4,'****') as mobile FROM `wx_yaoyao` WHERE ( id in(294,166,300,161,283) )
insert into
SELECT INSERT(`mobile`,4,4,'****') as mobile FROM `wx_yaoyao_tel` limit 5
SELECT INSERT(`mobile`,4,4,'****') as mobile FROM `wx_yaoyao` WHERE (  isYao = 1 and isDraw = 2 )

3、截取字符串 
substring(str, pos) 
substring(str, pos, length) 
说明:substring(被截取字段,从第几位开始截取) 
substring(被截取字段,从第几位开始截取,截取长度) 
例:select substring(content,5) as abstract from my_content_t 
select substring(content,5,200) as abstract from my_content_t 
(注:如果位数是负数 如-5 则是从后倒数位数,到字符串结束或截取的长度) 
4、按关键字截取字符串 
substring_index(str,delim,count) 
说明:substring_index(被截取字段,关键字,关键字出现的次数) 
例:select substring_index("blog.jb51.net","。",2) as abstract from my_content_t 
结果:blog.jb51 
来源: http://www.jb51.net/article/27458.htm

ASCII(char)        返回字符的ASCII码值;

1.ASCII(str)
返回值为字符串str 的最左字符的数值,即取得最左字符的ascii码。
假如str为空字符串,则返回值为 0 。假如str 为NULL,则返回值为 NULL。 
ASCII()用于带有从 0到255的数值的字符。

select ascii('B'); ## 66


BIT_LENGTH(str)      返回字符串的比特长度

2.BIN(N) 
返回值为N的二进制值的字符串表示,即转为二进制。
其中 N 为一个longlong (BIGINT) 数字。这等同于 CONV(N,10,2)。假如N 为NULL,则返回值为 NULL。

select BIN(27);//11011
CONCAT(s1,s2…,sn)      将s1,s2…,sn连接成字符串

select concat('s','g'); ## sg
CONCAT_WS(sep,s1,s2…,sn)  将s1,s2…,sn连接成字符串,并用sep字符间隔

CONCAT_WS() 代表 CONCAT With Separator ,是CONCAT()的特殊形式。   
第一个参数是其它参数的分隔符。分隔符的位置放在要连接的两个字符串之间。
分隔符可以是一个字符串,也可以是其它参数。如果分隔符为 NULL,则结果为 NULL。函数会忽略任何分隔符参数后的 NULL 值。

select concat_ws(',','s','g'); ## s,g
INSERT(str,x,y,instr)    将字符串str从第x位置开始,y个字符长的子串替换为字符串instr,返回结果

17.INSERT(str,pos,len,newstr) (str中的字符被newstr替换)
返回字符串 str, 其子字符串起始于 pos 位置和长期被字符串 newstr取代的len 字符。 
如果pos 超过字符串长度,则返回值为原始字符串。 
假如len的长度大于其它字符串的长度,则从位置pos开始替换。若任何一个参数为null,则返回值为NULL。

SELECT INSERT(`mobile`,4,4,'****') as mobile FROM `wx_yaoyao_tel` limit 5

select insert('13589233319',4,4,'****'); ## 135****3319


11.ELT(N,str1,str2,str3,...) 
若N = 1,则返回值为 str1 ,若N = 2,则返回值为 str2 ,以此类推。   若N 小于1或大于参数的数目,则返回值为 NULL 。

SELECT ELT(2,'a','b','g');## b

13.FIELD(str,str1,str2,str3,...) 
返回值为str1, str2, str3,……列表中的str 指数(位置)。在找不到str 的情况下,返回值为 0 。
如果所有对于FIELD() 的参数均为字符串,则所有参数均按照字符串进行比较。

select field('a','g','d','a'); ##3

如果所有的参数均为数字,则按照数字进行比较。否则,参数按照双倍进行比较。

select field(1,3,4,5,1);##4


FIND_IN_SET(str,list)   分析逗号分隔的list列表,如果发现str,返回str在list中的位置

http://www.cnblogs.com/manongxiaobing/p/4682698.html 

FIND_IN_SET(str,strlist)函数

假如字符串str 在由N 子链组成的字符串列表strlist 中, 则返回值的范围在 1 到 N 之间(即str在strlist中的位置) 
一个字符串列表就是一个由一些被‘,'符号分开的自链组成的字符串。

str 要查询的字符串

strlist 字段名 参数以”,”分隔 如 (1,2,6,8)

查询字段(strlist)中包含(str)的结果,返回结果为null或记录 

下面查询btype字段中包含”15″这个参数的值

SELECT * from test where FIND_IN_SET('15',btype)

15.FORMAT(X,D)  千分位格式化数字 
将数字X 的格式写为'#,###,###.##',以四舍五入的方式保留小数点后 D 位, 并将结果以字符串的形式返回。
若 D 为 0, 则返回结果不带有小数点,或不含小数部分。

select format(10000000000,3); ##10,000,000,000.000

18.INSTR(str,substr) 
返回字符串substr 在 str 中子字符串的第一个出现位置。这和LOCATE()的双参数形式相同,除非参数的顺序被颠倒。

SELECT INSTR('fddag','a'); ## 4


LCASE(str)或LOWER(str)   返回将字符串str中所有字符改变为小写后的结果

UCASE(str)或UPPER(str)   返回将字符串str中所有字符转变为大写后的结果

select lower('SDF');##sdf

LEFT(str,x)        返回字符串str中最左边的x个字符

SELECT LEFT('zxcvb',2); ##zx  LEFT(str,len) 返回从字符串str 开始的len 最左字符。

LENGTH(s)         返回字符串str中的字符数

21.LENGTH(str) 
返回值为字符串str 的长度,单位为字节。一个多字节字符算作多字节。
这意味着 对于一个包含5个2字节字符的字符串, LENGTH() 的返回值为 10, 而 CHAR_LENGTH()的返回值则为5。

select length('jkl咯');  ##6

select char_length('jkl咯');##4

读取文件并将这一文件按照字符串的格式返回。 
例:

复制代码代码如下:
mysql> UPDATE tbl_name
           SET blob_column=LOAD_FILE('/tmp/picture')
           WHERE id=1;

23.LOCATE(substr,str) , LOCATE(substr,str,pos)   和instr 参数相反 作用一样
第一个语法返回字符串 str中子字符串substr的第一个出现位置。
第二个语法返回字符串 str中子字符串substr的第一个出现位置, 起始位置在pos。如若substr 不在str中,则返回值为0。

25.LPAD(str,len,padstr) 
返回字符串 str, 其左边由字符串padstr 填补到len 字符长度。假如str 的长度大于len, 则返回值被缩短至 len 字符。
即在str前面添加长度为len的padstr.

select lpad('a',5,'g'); ##gggga 填充到制定的长度
LTRIM(str)从字符串str中切掉开头的空格  RTRIM(str) 返回字符串str尾部的空格 TRIM(str)  去除字符串首部和尾部的所有空格
返回字符串 str ,其引导空格字符被删除
select ltrim('    aaaaaa'); ## 切掉开头的空格
POSITION(substr,str)    返回子串substr在字符串str中第一次出现的位置
POSITION(substr IN str)是 LOCATE(substr,str)同义词。
QUOTE(str)         用反斜杠转义str中的单引号 引证一个字符串,由此产生一个在SQL语句中可用作完全转义数据值的结果。
select quote("adad'adasd"); ## adad\'adasd  把字符串的单引号转义

REPEAT(str,srchstr,rplcstr)返回字符串str重复x次的结果

返回一个由重复的字符串str 组成的字符串,字符串str的数目等于count 。 
若 count <= 0,则返回一个空字符串。若str 或 count 为 NULL,则返回 NULL 。

select repeat('a',3);  ##aaa 返回重复3次的字符串 

35.REPLACE(str,from_str,to_str)
返回字符串str 以及所有被字符串to_str替代的字符串from_str 。
REVERSE(str)        返回颠倒字符串str的结果

SELECT REVERSE('abc') ## cba 颠倒循序
RIGHT(str,x)        返回字符串str中最右边的x个字符

select right('zxcvb',2) ##vb RIGHT(str,len) 返回从字符串str 开始的len 最右字符。

STRCMP(s1,s2)       比较字符串s1和s2

若所有的字符串均相同,则返回STRCMP(),若根据当前分类次序,第一个参数小于第二个,则返回 -1,其它情况返回 1 

select strcmp('1','5'); ## -1

SELECT STRCMP('a','a'); ## 0

SELECT STRCMP('a','fffaadad'); ## -1

SELECT STRCMP('afdsfs','aa'); ## 1
TRIM(str)         去除字符串首部和尾部的所有空格

附:小提示
MySQL必要时自动变换数字为字符串,并且反过来也如此:
mysql> SELECT 1+"1"; -> 2mysql> SELECT CONCAT(2,' test'); -> '2 test'
如果你想要明确地变换一个数字到一个字符串,把它作为参数传递到CONCAT()。
如果字符串函数提供一个二进制字符串作为参数,结果字符串也是一个二进制字符串。被变换到一个字符串的数字被当作是一个二进制字符串。这仅影响比较。
mysql 连接字符串与SQL不同

 
以前用SQL Server 连接字符串是用“+”,现在数据库用mysql,写个累加两个字段值SQL语句居然不支持"+",郁闷了半天在网上查下,才知道mysql里的+是数字相加的操作,连接字符串是CONCAT函数
例:
mysql> select CONCAT('My', '_', '2001');
-> 'My_2001'


你可能感兴趣的:(mysql)