Disn mysql_MySQL中的字符串函数

使用字符串数据

当使用字符串数据时,可以使用下面的字符数据类型。

CHAR

固定长度、不足部分使用空格填充的字符串。

varchar

变长字符串。

text(MySQL和SQL Server)或CLOB(CHaracter Large Object;Oracle Database)

容纳大长度的边长字符串(通常在上下文中指代文本)。MySQL具有多种text类型(tinytext、text、mediumtext和longtext),最多可保存4GB大小的文档数据。

创建下表用于演示:

CREATE TABLE string_tbl

(

char_fld CHAR(30),

vchar_fld VARCHAR(30),

text_fld TEXT

);

生成字符串

生成字符串数据的最简单方式是使用一对单引号将字符串包含起来:

INSERT INTO string_tbl (char_fld, vchar_fld, text_fld)

VALUES ('This is char data', 'This is varchar data', 'This is text data');

通过

SELECT @@session.sql_mode;

命令可以查看MySQL命令的模式。

结果如下:

mysql> SELECT @@session.sql_mode;

+----------------------------------------------------------------+

| @@session.sql_mode |

+----------------------------------------------------------------+

| STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |

+----------------------------------------------------------------+

1 row in set (0.00 sec)

在MySQL中,默认行为是“strict”模式,即在发生问题时抛出异常,而在早先的服务器版本中,默认方式是阶段字符串并发出一个警告。如果希望数据库引擎采取后一种方式,可以将之修改为ANSI模式:

SET sql_mode='ansi';

通过

SHOW WARNINGS;

来查看警告。

处理字符串中包含单引号的情况

如果要插入的字符串中包含单引号,可以:

通过在单引号前再添加一个单引号作为转义符

或选择反斜杠作为单引号的转义字符

mysql> UPDATE string_tbl

-> SET text_fld = 'This String disn''t work, but it does now';

Query OK, 1 row affected (0.14 sec)

Rows matched: 1 Changed: 1 Warnings: 0

mysql> UPDATE string_tbl

-> SET text_fld = 'This String disn\'t work, but it does now';

Query OK, 0 rows affected (0.13 sec)

Rows matched: 1 Changed: 0 Warnings: 0

使用内建函数 quote() ,可以将整个字符串包含起来,并为字符串本身的单引号/撇号增加转义符。例:

SELECT quote(text_fld) FROM string_tbl;

结果:

mysql> SELECT quote(text_fld) FROM string_tbl;

+---------------------------------------------+

| quote(text_fld) |

+---------------------------------------------+

| 'This String disn\'t work, but it does now' |

+---------------------------------------------+

1 row in set (0.00 sec)

包含特殊字符

内建函数 char() 可用于从ASCII字符集中255个字符中任意构建字符串:

SELECT CHAR(128,129,130,131,132,133,134,135,136,137);

结果:

mysql> SELECT CHAR(128,129,130,131,132,133,134,135,136,137);

+-----------------------------------------------+

| CHAR(128,129,130,131,132,133,134,135,136,137) |

+-----------------------------------------------+

| 亗儎厗噲 |

+-----------------------------------------------+

1 row in set (0.00 sec)

concat() 函数用于连接字符串:

mysql> SELECT CONCAT('zifeiy haha ', CHAR(148), 'n');

+----------------------------------------+

| CONCAT('zifeiy haha ', CHAR(148), 'n') |

+----------------------------------------+

| zifeiy haha 攏 |

+----------------------------------------+

1 row in set (0.00 sec)

ascii() 函数接受一个字符并返回其序号:

mysql> SELECT ASCII('a');

+------------+

| ASCII('a') |

+------------+

| 97 |

+------------+

1 row in set (0.05 sec)

操作字符串

length()函数:返回字符串的字符数

SELECT LENGTH(char_fld) char_length,

LENGTH(vchar_fld) varchar_length,

LENGTH(text_fld)text_length

FROM string_tbl;

position()函数:查找字符串中子字符串的位置

SELECT POSITION('zifeiy' IN vchar_fld)

FROM string_tbl;

locate()函数:从指定位置开始搜索字符串中的子字符串

SELECT LOCATE('zifeiy', vchar_fld, 5)

FROM string_tbl;

strcmp()函数:字符串比较函数

该函数接受两个字符串作为参数,并返回下面的结果之一:

-1,第一个字符串字典序小于第二个字符串字典序

0,两个字符串相等

1,第一个字符串字典序大于第二个字符串

SELECT STRCMP('12345', '12345') 12345_12345,

STRCMP('abcd', 'xyz') abcd_xyz,

STRCMP('abcd', 'QRSTUV') abcd_QRSTUV,

STRCMP('qrstuv', 'QRSTUV') qrstuv_QRSTUV,

STRCMP('12345', 'xyz') 12345_xyz,

STRCMP('xyz', 'qrstuv') xyz_qrstuv;

结果:

+-------------+----------+-------------+---------------+-----------+------------+

| 12345_12345 | abcd_xyz | abcd_QRSTUV | qrstuv_QRSTUV | 12345_xyz | xyz_qrstuv |

+-------------+----------+-------------+---------------+-----------+------------+

| 0 | -1 | -1 | 0 | -1 | 1 |

+-------------+----------+-------------+---------------+-----------+------------+

除了strcmp()函数,MySQL还可以在select语句中使用like和regexp操作符来比较字符串

SELECT name, name LIKE '%ns' end_in_ns

FROM department;

SELECT cust_id, cust_type_cd, fed_id,

fed_id REGEXP '.{3}-.{2}-.{4}' is_ss_no_format

FROM customer;

CONCAT()函数的用法示例:

UPDATE string_tbl

SET text_fld = CONCAT(text_fld, ', now longer');

SELECT CONCAT(fname, ' ', lname) FROM employee;

insert()函数 ,它接受4个参数:原始字符串、字符串操作的开始位置、需要替换的字符串以及替换字符串。根据第三个值,函数可以选择插入或替换原始字符串中的字符。如果该参数值为0,那么替换字符串将会被插入其中,并且剩余的字符将会向右排放。

SELECT INSERT('zifeiy hello', 9, 0, 'haha');

substring()函数 从指定位置开始提取指定数目的字符:

SELECT SUBSTRING('goodbye zifeiy world', 9, 6);

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值