MySQL 中的函数(二:字符串函数)

一、计算字符串长度 LENGTH()
在 MYSQLServer 中这个函数名称为 LEN()。
该函数接受一个参数,此参数为待计算的字符串表达式:
MYSQL,Oracle,DB2:
SELECT FName, LENGTH(FName) FROM T_Person
MSSQLServer:
SELECT FName, LEN(FName) FROM T_Person

二、字符串转换为小写 LOWER()
该函数接受一个参数,此参数为待转换的字符串表达式:
SELECT FName, LOWER(FName) FROM T_Person

三、字符串转换为大写 UPPER ()
该函数接受一个参数,此参数为待转换的字符串表达式:
SELECT FName, UPPER(FName) FROM T_Person

四、截去字符串左侧空格 LTRIM()
该函数接受一个参数,此参数为待处理的字符串表达式:
SELECT FName,LTRIM(FName),LTRIM(‘ abc ‘) FROM T_Person
再执行下面的SQL语句:
MYSQL:
SELECT ‘ 123 abc ‘, LENGTH(‘ 123 abc ‘) ,
LENGTH( LTRIM(‘ 123 abc ‘) )
MSSQLServer:
SELECT ‘ 123 abc ‘, LEN(‘ 123 abc ‘) ,
LEN( LTRIM(‘ 123 abc ‘) )

五、截去字符串右侧空格 RTRIM ()
该函数接受一个参数,此参数为待处理的字符串表达式:
SELECT FName,RTRIM(FName),RTRIM(‘ abc ‘) FROM T_Person
再执行下面的SQL语句:
MYSQL:
SELECT ‘ 123 abc ‘, LENGTH(‘ 123 abc ‘) ,
LENGTH( RTRIM(‘ 123 abc ‘) )
MSSQLServer:
SELECT ‘ 123 abc ‘, LEN(‘ 123 abc ‘) ,
LEN( RTRIM(‘ 123 abc ‘) )

六、截去字符串两侧的空格 TRIM ()
此函数只在 MYSQL 和 Oracle 中提供支持,
但在 MSSQLServer 和 DB2 中可以使用 LTRIM(RTRIM(string)) 来模拟实现 TRIM (string)。
该函数接受一个参数,此参数为待处理的字符串表达式:
MYSQL,Oracle:
SELECT FName,TRIM(FName),TRIM(‘ abc ‘) FROM T_Person
MSSQLServer,DB2:
SELECT FName,LTRIM(RTRIM(FName)),LTRIM(RTRIM(‘ abc ‘)) FROM
T_Person
再执行下面的SQL语句:
MYSQL:
SELECT ‘ 123 abc ‘, LENGTH(‘ 123 abc ‘) ,
LENGTH(TRIM(‘ 123 abc ‘))
MSSQLServer:
SELECT ‘ 123 abc ‘, LEN(‘ 123 abc ‘) ,
LEN(LTRIM(RTRIM(‘ 123 abc ‘)))

七、取子字符串 SUBSTRING()
该函数参数格式如下:
SUBSTRING(string,start_position,length)
其中参数 string 为主字符串,start_position 为子字符串在主字符串中的起始位置,length为子字符串的最大长度:
SELECT SUBSTRING(‘abcdef111’,2,3)
再执行下面的SQL语句:
SELECT FName, SUBSTRING(FName,2,3) FROM T_Person
注:
字符串是由多个字符组成的串,如 “HelloWorld” 在内存是如下存储的:
1 2 3 4 5 6 7 8 9 10
H e l l o W o r l d

八、计算子字符串的位置 INSTR()
这个函数在 MYSQL 和 Oracle 中名称为INSTR:
INSTR(string,substring)
其中参数 string 为主字符串,参数 substring 为待查询的子字符串。
如果 string 中存在 substring 子字符串,则返回子字符串第一个字符在主字符串中出现的位置;
如果 string 中不存在 substring 子字符串,则返回 0。
在 MSSQLServer 中这个函数名为 CHARINDEX,其参数格式以及返回值规则与 INSTR() 一致。
在 DB2 中这个函数名为 LOCATE,其返回值规则与前述几种数据库系统一致,不过参数格式与它们正好相反,其参数格式如下:
LOCATE(substring,string)
例:
MYSQL,Oracle:
SELECT FName, INSTR(FName,’m’) , INSTR(FName,’ly’)
FROM T_Person
MSSQLServer:
SELECT FName,CHARINDEX(FName,’m’), CHARINDEX(FName,’ly’)
FROM T_Person
DB2:
SELECT FName, LOCATE(‘m’,FName) , LOCATE(‘ly’,FName)

九、从左侧开始取子字符串 LEFT()
使用 SUBSTRING() 函数可以从任意位置开始取任意长度的子字符串,不过有时候只需要从左侧开始取子字符串,这时如果使用 SUBSTRING() 函数的话仍然需要指定三个参数,其中第二个参数为常量 1。
MYSQL、MSSQLServer、DB2 中提供了 LEFT() 函数用于从左侧开始取任意长度的子字符串,其参数格式如下::
LEFT (string,length)
其中参数 string 为主字符串,length 为子字符串的最大长度。
Oracle 中不支持LEFT()函数,只能使用 SUBSTR() 函数进行变通实现,即:
SUBSTR(string, 1, length)。
例:
MYSQL,MSSQLServer,DB2:
SELECT FName, LEFT(FName,3) , LEFT(FName,2)
FROM T_Person
Oracle:
SELECT FName,SUBSTR(FName, 1,3),SUBSTR(FName, 1,2)
FROM T_Person

十、从右侧开始取子字符串 RIGHT()
其参数格式如下:
RIGHT (string,length)
其中参数string为主字符串,length为子字符串的最大长度。
Oracle中不支持 RIGHT ()函数,只能使用 SUBSTR() 函数进行变通实现,其中起始位置用如下表达式计算出来:
startposition= LENGTH(string)- length+1
也就是 SUBSTR(string, LENGTH(string)- length+1, length) 等价于RIGHT (string,length)。
例:
MYSQL,MSSQLServer,DB2:
SELECT FName, RIGHT(FName,3) , RIGHT(FName,2)
FROM T_Person
Oracle:
SELECT FName,SUBSTR(FName, LENGTH(FName)-3 +1, 3),
SUBSTR(FName, LENGTH(FName)-2 +1, 2) FROM T_Person

十一、字符串替换 REPLACE()
如将 “Hello World” 中的 “rl” 替换为 “ok” 后得到 “Hello Wookd”,
把 “Just so so”中的 “s” 替换为 “z” 后得到 “Juzt zo zo”。
REPLACE() 函数的参数格式如下:
REPLACE(string,string_tobe_replace,string_to_replace)
其中参数 string 为要进行替换操作的主字符串,
参数 string_tobe_replace 为要被替换的字符串,
string_to_replace 将替换 string_tobe_replace 中所有出现的地方。
例:
select FName,REPLACE(FName,’i’,’e’),FIDNumber,
REPLACE(FIDNumber,’2345′,’abcd’) FROM T_Person

十一.1、删除字符串中匹配的子字符串
SQL 中没有提供删除字符串中匹配的子字符串的方法,
使用 REPLACE() 函数可以达到删除子字符串的方法,
即:将第三个参数设定为空字符串,用空字符串来替换匹配的子字符串。
将 FName 中的 m 以及 FIDNumber 中的 123 删除:
SELECT FName, REPLACE(FName,’m’,”) ,FIDNumber,
REPLACE(FIDNumber,’123′,”) FROM T_Person

十一.2、删除字符串中间的空格
LTRIM()、RTRIM() 和 TRIM() 都只能删除两侧的字符串,无法删除字符串中间的空格,
而使用 REPLACE() 函数也可以完成这个功能,也就是用空字符串替换中所有的空格:
SELECT REPLACE(‘ abc 123 wpf’,’ ‘,”) , REPLACE(‘ ccw enet wcf f’,’ ‘,”)

十二、得到字符的 ASCII 码 ASCII()
有且只有一个参数,这个参数为待求 ASCII 码的字符,
如果参数为一个字符串则函数返回第一个字符的 ASCII 码:
SELECT ASCII(‘a’) , ASCII(‘abc’)
计算每个员工姓名的第一个字符的 ASCII 码:
SELECT FName, LEFT(FName,1) , ASCII( LEFT(FName,1) ) ,
ASCII(FName) FROM T_Person

十三、得到一个ASCII码数字对应的字符 CHAR()
SELECT CHAR(56) , CHAR(90) ,’a’, CHAR( ASCII(‘a’) )
将 FWeight 转换为整数,然后得到它对应的字符:
MYSQL、MSSQLServer:
SELECT FWeight, CEILING(FWeight) , CHAR( CEILING(FWeight) )
FROM T_Person

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值