您的位置:首页 > 数据库 > MySQL

mysql中的replace,concat,cast等等字符串函数

2011-12-14 17:39 423 查看


mysql中的replace,concat,cast字符串函数

工作中需要导出一份求职用户的个人信息,这个信息

需要三表联查

要求出生日期格式:1990.01.02数据库是:1990-01-02

性别显示:男女数据库是int型:01(分别对应男女)

解决办法:

三表联查

1
SELECT

*
FROM

(表1
INNER

JOIN
表2
ON

表1.字段号=表2.字段号)
2
INNER

JOIN
表3
ON

表1.字段号=表3.字段号
2.时间格式化
DATE_FORMAT(date,format)


date参数是合法的日期。format规定日期/时间的输出格式。

详细参看:http://www.w3school.com.cn/sql/func_date_format.asp

3.性别显示就复杂了

首先需要mysql替换函数replace


mysql中replace

如:表tb1里面的f1字段的abc替换为def

REPLACE(f1,‘abc’,‘def’);

ps:这样的话也可以使用mysql批量修改了

如:批量修改mysql语句
UPDATEarticleSET
content=replace(content,’PHP10086’,’PHP淮北’)
WHEREID<5000;


不过replace适用于同类型的替换,如果不是同一类型的字段那就需要转化字段类型了。


mysql中cast

将Int转为varchar经常用concat函数,比如concat(8,'0')得到字符串'80'

将varchar转为Int用cast(aassigned)a为varchar类型的字符串,如CAST(c.sexASCHAR)


可用的类型

二进制,同带binary前缀的效果:BINARY

字符型,可带参数:CHAR()日期:DATE

时间:TIME

日期时间型:DATETIME

浮点数:DECIMAL

整数:SIGNED

无符号整数:UNSIGNED


mysql中concat

concat

MySQL中concat函数

使用方法:

CONCAT(str1,str2,…)返回结果为连接参数产生的字符串。如有任何一个参数为NULL,则返回值为NULL。

注意:

如果所有参数均为非二进制字符串,则结果为非二进制字符串。

如果自变量中含有任一二进制字符串,则结果为一个二进制字符串。

一个数字参数被转化为与之相等的二进制字符串格式;若要避免这种情况,可使用显式类型cast,例如:

SELECTCONCAT(CAST(int_colASCHAR),char_col)MySQL的concat函数可以连接一个或者多个字符串,如

mysql>selectconcat(’10′);

+————–+

|concat(’10′)|

+————–+

|10|

+————–+

1rowinset(0.00sec)mysql>selectconcat(’11′,’22′,’33′);

+————————+

|concat(’11′,’22′,’33′)|

+————————+

|112233|

+————————+

1rowinset(0.00sec)MySQL的concat函数在连接字符串的时候,只要其中一个是NULL,那么将返回NULL

mysql>selectconcat(’11′,’22′,null);

+————————+

|concat(’11′,’22′,null)|

+————————+

|NULL|

+————————+

1rowinset(0.00sec)


完整的sql:

1
select

c.
name

as
'姓名'
,
REPLACE
(
REPLACE
(
CAST
(c.sex
AS

CHAR
),
'0'
,
'男'
),
'1'
,
'女'
)
as

'性别'
,c.nation
as

'民族'
,DATE_FORMAT(c.birthday,
'%Y.%m.%d'
)
as

'出生日期'
,
2
c.province
as

'生源地'
,c.politics
as

'政治面貌'
,c.school
as

'毕业学校'
,c.major
as

'专业'
,
3
c.degree
as

'学历'
,c.phone
as

'电话'
,c.major
as

'专业'
,p.title
as

'岗位'
4
from


(map
as


m
left

join

c_resume
as


c
on

c.uid=m.contentid)
5
left

join

program
as


p
on


m.pid=p.id
where


m.intro=1limit60,90
结果:性别:男,女(完全正确)



使用了两次replace把01换成男女

之前我一直想使用concat合并字段但是不成功

selectc.nameas‘姓名’,concat(REPLACE(CAST(c.sexASCHAR),’0′,‘男’),REPLACE(CAST(c.sexASCHAR),’1′,‘女’))as‘性别’,c.nationas‘民族’,DATE_FORMAT(c.birthday,’%Y.%m.%d’)as‘出生日期’,c.provinceas‘生源地’,c.politicsas‘政治面貌’,c.schoolas‘毕业学校’,c.majoras‘专业’,c.degreeas‘学历’,c.phoneas‘电话’,c.majoras‘专业’,p.titleas‘岗位’

from(mapasmleftjoinc_resumeasconc.uid=m.contentid)leftjoinprogramasponm.pid=p.idwherem.intro=1limit60,90

结果:性别:男0,女1(不成功)






mysql的字符串函数

附一个mysql的字符串函数的文章:http://www.phpv.net/html/1443.html

对于针对字符串位置的操作,第一个位置被标记为1。
ASCII(str)
返回字符串
str
的最左面字符的ASCII代码值。
如果
str
是空字符串,返回
0
。如果
str
NULL
,返回
NULL


mysql>selectASCII('2');
->50
mysql>selectASCII(2);
->50
mysql>selectASCII('dx');
->100


也可参见ORD()函数。

ORD(str)
如果字符串str最左面字符是一个多字节字符,通过以格式
((firstbyteASCIIcode)*256+(secondbyteASCIIcode))[*256+thirdbyteASCIIcode...]
返回字符的ASCII代码值来返回多字节字符代码。如果最左面的字符不是一个多字节字符。返回与
ASCII()
函数返回的相同值。

mysql>selectORD('2');
->50

CONV(N,from_base,to_base)
在不同的数字基之间变换数字。返回数字
N
的字符串数字,从
from_base
基变换为
to_base
基,如果任何参数是
NULL
,返回
NULL
。参数
N
解释为一个整数,但是可以指定为一个整数或一个字符串。最小基是
2
且最大的基是
36
。如果
to_base
是一个负数,
N
被认为是一个有符号数,否则,
N
被当作无符号数。
CONV
以64位点精度工作。

mysql>selectCONV("a",16,2);
->'1010'
mysql>selectCONV("6E",18,8);
->'172'
mysql>selectCONV(-17,10,-18);
->'-H'
mysql>selectCONV(10+"10"+'10'+0xa,10,10);
->'40'

BIN(N)
返回二进制值
N
的一个字符串表示,在此
N
是一个长整数(
BIGINT
)数字,这等价于
CONV(N,10,2)
。如果
N
NULL
,返回
NULL


mysql>selectBIN(12);
->'1100'

OCT(N)
返回八进制值
N
的一个字符串的表示,在此
N
是一个长整型数字,这等价于
CONV(N,10,8)
。如果
N
是NULL,返回
NULL


mysql>selectOCT(12);
->'14'

HEX(N)
返回十六进制值
N
一个字符串的表示,在此
N
是一个长整型(
BIGINT
)数字,这等价于
CONV(N,10,16)
。如果
N
NULL
,返回
NULL


mysql>selectHEX(255);
->'FF'

CHAR(N,...)
CHAR()
将参数解释为整数并且返回由这些整数的ASCII代码字符组成的一个字符串。
NULL
值被跳过。

mysql>selectCHAR(77,121,83,81,'76');
->'MySQL'
mysql>selectCHAR(77,77.3,'77.3');
->'MMM'

CONCAT(str1,str2,...)
返回来自于参数连结的字符串。如果任何参数是
NULL
,返回
NULL
。可以有超过2个的参数。一个数字参数被变换为等价的字符串形式。

mysql>selectCONCAT('My','S','QL');
->'MySQL'
mysql>selectCONCAT('My',NULL,'QL');
->NULL
mysql>selectCONCAT(14.3);
->'14.3'

LENGTH(str)
OCTET_LENGTH(str)
CHAR_LENGTH(str)
CHARACTER_LENGTH(str)
返回字符串
str
的长度。

mysql>selectLENGTH('text');
->4
mysql>selectOCTET_LENGTH('text');
->4


注意,对于多字节字符,其CHAR_LENGTH()仅计算一次。

LOCATE(substr,str)
POSITION(substrINstr)
返回子串
substr
在字符串
str
第一个出现的位置,如果
substr
不是在
str
里面,返回
0
.

mysql>selectLOCATE('bar','foobarbar');
->4
mysql>selectLOCATE('xbar','foobar');
->0

该函数是多字节可靠的。

LOCATE(substr,str,pos)
返回子串
substr
在字符串
str
第一个出现的位置,从位置
pos
开始。如果
substr
不是在
str
里面,返回
0


mysql>selectLOCATE('bar','foobarbar',5);
->7


这函数是多字节可靠的。

INSTR(str,substr)
返回子串
substr
在字符串
str
中的第一个出现的位置。这与有2个参数形式的
LOCATE()
相同,除了参数被颠倒。

mysql>selectINSTR('foobarbar','bar');
->4
mysql>selectINSTR('xbar','foobar');
->0


这函数是多字节可靠的。

LPAD(str,len,padstr)
返回字符串
str
,左面用字符串
padstr
填补直到
str
len
个字符长。

mysql>selectLPAD('hi',4,'??');
->'??hi'

RPAD(str,len,padstr)
返回字符串
str
,右面用字符串
padstr
填补直到
str
len
个字符长。
mysql>selectRPAD('hi',5,'?');
->'hi???'

LEFT(str,len)
返回字符串
str
的最左面
len
个字符。

mysql>selectLEFT('foobarbar',5);
->'fooba'


该函数是多字节可靠的。

RIGHT(str,len)
返回字符串
str
的最右面
len
个字符


mysql>selectRIGHT('foobarbar',4);
->'rbar'


该函数是多字节可靠的。

SUBSTRING(str,pos,len)
SUBSTRING(strFROMposFORlen)
MID(str,pos,len)
从字符串
str
返回一个
len
个字符的子串,从位置
pos
开始。使用
FROM
的变种形式是ANSISQL92语法。

mysql>selectSUBSTRING('Quadratically',5,6);
->'ratica'


该函数是多字节可靠的。

SUBSTRING(str,pos)
SUBSTRING(strFROMpos)
从字符串
str
的起始位置
pos
返回一个子串。

mysql>selectSUBSTRING('Quadratically',5);
->'ratically'
mysql>selectSUBSTRING('foobarbar'FROM4);
->'barbar'


该函数是多字节可靠的。

SUBSTRING_INDEX(str,delim,count)
返回从字符串
str
的第
count
个出现
分隔符
delim
之后的子串。如果
count
是正数,返回最后的分隔符到左边(从左边数)的所有字符。如果
count
是负数,返回最后的分隔符到右边的所有字符(从右边数)。

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


该函数对多字节是可靠的。

LTRIM(str)
返回删除了其前置空格字符的字符串
str


mysql>selectLTRIM('barbar');
->'barbar'

RTRIM(str)
返回删除了其拖后空格字符的字符串
str


mysql>selectRTRIM('barbar');
->'barbar'

该函数对多字节是可靠的。

TRIM([[BOTH|LEADING|TRAILING][remstr]FROM]str)
返回字符串
str
,其所有
remstr
前缀或后缀被删除了。如果没有修饰符
BOTH
LEADING
TRAILING
给出,
BOTH
被假定。如果
remstr
没被指定,空格被删除。

mysql>selectTRIM('bar');
->'bar'
mysql>selectTRIM(LEADING'x'FROM'xxxbarxxx');
->'barxxx'
mysql>selectTRIM(BOTH'x'FROM'xxxbarxxx');
->'bar'
mysql>selectTRIM(TRAILING'xyz'FROM'barxxyz');
->'barx'


该函数对多字节是可靠的。

SOUNDEX(str)
返回
str
的一个同音字符串。听起来“大致相同”的2个字符串应该有相同的同音字符串。一个“标准”的同音字符串长是4个字符,但是
SOUNDEX()
函数返回一个任意长的字符串。你可以在结果上使用
SUBSTRING()
得到一个“标准”的同音串。所有非数字字母字符在给定的字符串中被忽略。所有在A-Z之外的字符国际字母被当作元音。

mysql>selectSOUNDEX('Hello');
->'H400'
mysql>selectSOUNDEX('Quadratically');
->'Q36324'

SPACE(N)
返回由
N
个空格字符组成的一个字符串。

mysql>selectSPACE(6);
->''

REPLACE(str,from_str,to_str)
返回字符串
str
,其字符串
from_str
的所有出现由字符串
to_str
代替。

mysql>selectREPLACE('www.mysql.com','w','Ww');
->'WwWwWw.mysql.com'


该函数对多字节是可靠的。

REPEAT(str,count)
返回由重复
count
Times次的字符串
str
组成的一个字符串。如果
count<=0
,返回一个空字符串。如果
str
count
NULL
,返回
NULL


mysql>selectREPEAT('MySQL',3);
->'MySQLMySQLMySQL'

REVERSE(str)
返回颠倒字符顺序的字符串
str


mysql>selectREVERSE('abc');
->'cba'


该函数对多字节可靠的。

INSERT(str,pos,len,newstr)
返回字符串
str
,在位置
pos
起始的子串且
len
个字符长得子串由字符串
newstr
代替。

mysql>selectINSERT('Quadratic',3,4,'What');
->'QuWhattic'


该函数对多字节是可靠的。

ELT(N,str1,str2,str3,...)
如果
N
=
1
,返回
str1
,如果
N
=
2
,返回
str2
,等等。如果
N
小于
1
或大于参数个数,返回
NULL
ELT()
FIELD()
反运算。

mysql>selectELT(1,'ej','Heja','hej','foo');
->'ej'
mysql>selectELT(4,'ej','Heja','hej','foo');
->'foo'

FIELD(str,str1,str2,str3,...)
返回
str
str1
,
str2
,
str3
,
...
清单的索引。如果
str
没找到,返回
0
FIELD()
ELT()
反运算。

mysql>selectFIELD('ej','Hej','ej','Heja','hej','foo');
->2
mysql>selectFIELD('fo','Hej','ej','Heja','hej','foo');
->0

FIND_IN_SET(str,strlist)
如果字符串
str
在由
N
子串组成的表
strlist
之中,返回一个
1
N
的值。一个字符串表是被“,”分隔的子串组成的一个字符串。如果第一个参数是一个常数字符串并且第二个参数是一种类型为
SET
的列,
FIND_IN_SET()
函数被优化而使用位运算!如果
str
不是在
strlist
里面或如果
strlist
是空字符串,返回
0
。如果任何一个参数是
NULL
,返回
NULL
。如果第一个参数包含一个“,”,该函数将工作不正常。

mysql>SELECTFIND_IN_SET('b','a,b,c,d');
->2

MAKE_SET(bits,str1,str2,...)
返回一个集合(包含由“,”字符分隔的子串组成的一个字符串),由相应的位在
bits
集合中的的字符串组成。
str1
对应于位0,
str2
对应位1,等等。在
str1
,
str2
,
...
中的
NULL
串不添加到结果中。

mysql>SELECTMAKE_SET(1,'a','b','c');
->'a'
mysql>SELECTMAKE_SET(1|4,'hello','nice','world');
->'hello,world'
mysql>SELECTMAKE_SET(0,'a','b','c');
->''

EXPORT_SET(bits,on,off,[separator,[number_of_bits]])
返回一个字符串,在这里对于在“bits”中设定每一位,你得到一个“on”字符串,并且对于每个复位(reset)的位,你得到一个“off”字符串。每个字符串用“separator”分隔(缺省“,”),并且只有“bits”的“number_of_bits”(缺省64)位被使用。

mysql>selectEXPORT_SET(5,'Y','N',',',4)->Y,N,Y,N

LCASE(str)
LOWER(str)
返回字符串
str
,根据当前字符集映射(缺省是ISO-8859-1Latin1)把所有的字符改变成小写。该函数对多字节是可靠的。

mysql>selectLCASE('QUADRATICALLY');
->'quadratically'

UCASE(str)
UPPER(str)
返回字符串
str
,根据当前字符集映射(缺省是ISO-8859-1Latin1)把所有的字符改变成大写。该函数对多字节是可靠的。

mysql>selectUCASE('Hej');
->'HEJ'


该函数对多字节是可靠的。

LOAD_FILE(file_name)
读入文件并且作为一个字符串返回文件内容。文件必须在服务器上,你必须指定到文件的完整路径名,而且你必须有file权限。文件必须所有内容都是可读的并且小于
max_allowed_packet
。如果文件不存在或由于上面原因之一不能被读出,函数返回
NULL


mysql>UPDATEtable_name
SETblob_column=LOAD_FILE("/tmp/picture")WHEREid=1;


MySQL必要时自动变换数字为字符串,并且反过来也如此:
mysql>SELECT1+"1";
->2
mysql>SELECTCONCAT(2,'test');
->'2test'


如果你想要明确地变换一个数字到一个字符串,把它作为参数传递到
CONCAT()


如果字符串函数提供一个二进制字符串作为参数,结果字符串也是一个二进制字符串。被变换到一个字符串的数字被当作是一个二进制字符串。这仅影响比较。

Technorati标签:mysql中的replace,concat,cast,mysql字符串函数

标签:cast,concat,mysql中的replace,mysql字符串函数

本文链接:mysql中的replace,concat,cast等等字符串函数

联系作者:PHP淮北,交流QQ群:153856687

版权所有:非特殊声明均为本站原创文章,转载请注明出处:PHP10086博客网

关于本站:据说每个程序员都应该挖一口自己的井:http://www.php10086.com。

订阅更新:欢迎通过RSS订阅我们的内容更新
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息