使用字符串数据

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

  • 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);

MySQL中的字符串函数的更多相关文章

  1. MySQL中常用字符串函数

    1.字符串长度函数CHAR_LENGTH(str),LENGTH(str)  CHAR_LENGTH()返回值为字符串str的长度,长度的单位为字符.一个多字节字符算作一个单字符.对于一个包含五个二字 ...

  2. Mysql中使用find_in_set函数查找字符串

    mysql有个表的字段的存储是以逗号分隔的,如domain字段login.s01.yy.com,s01.yy.com,s02.yy.com.现在要查找s01.yy.com这个.我们用like查找好像不 ...

  3. mysql中的substr()函数

    mysql中的substr()函数和hibernate的substr()参数都一样,就是含义有所不同. 用法: substr(string string,num start,num length); ...

  4. Mysql中常用的函数汇总

    Mysql中常用的函数汇总: 一.数学函数abs(x) 返回x的绝对值bin(x) 返回x的二进制(oct返回八进制,hex返回十六进制)ceiling(x) 返回大于x的最小整数值exp(x) 返回 ...

  5. Mysql中的常用函数:

    Mysql中的常用函数: 1.字符串函数: (1).合并字符串 concat():// concat('M','y',"SQL",'5.5');== MySQL5.5//当传入的参 ...

  6. [转]mysql中的字符串的拼接

    字符串的拼接 1,Mysql 在Java.C#等编程语言中字符串的拼接可以通过加号“+”来实现,比如:"1"+"3"."a"+"b ...

  7. 使用Mysql中的concat函数或正则匹配来快速批量生成用于执行的sql语句

    背景介绍 今天需要给一张表里面补数据,需要按照行的维度进行update,如果是个别数据那么直接写update语句就可以了,但是场景要求的是将整表的数据进行update,要实现这个需求就不能只靠蛮力了, ...

  8. Oracle和Mysql中的字符串的拼接

    SQL允许两个或者多个字段之间进行计算,字符串类型的字段也不例外.比如我们需要 以"工号+姓名"的方式在报表中显示一个员工的信息,那么就需要把工号和姓名两个字符 串类型的字段拼接计 ...

  9. Python3中的字符串函数学习总结

    这篇文章主要介绍了Python3中的字符串函数学习总结,本文讲解了格式化类方法.查找 & 替换类方法.拆分 & 组合类方法等内容,需要的朋友可以参考下. Sequence Types ...

随机推荐

  1. Java代理模式之动态代理

    动态代理类的源码是程序在运行期间由JVM根据反射等机制动态生成的,所以不存在代理类的字节码文件.代理角色和真实角色的联系在程序运行时确定! Java中有两种动态代理,一种是JDK自带的,另一种的CGL ...

  2. nxlog4go 的配置驱动

    刚开始接触log4go项目时,没有注意到配置的重要性. 阅读了log4j.log4net.log4cpp.log4cplus的部分代码,发现它们都是以xml配置来驱动日志系统运行的. 多个源文件共享一 ...

  3. 源码实现 --> itoa函数实现

    itoa函数实现 itoa()函数的功能是将一个整数转换为一个字符串 例如12345,转换之后的字符串为"12345",-123转换之后为"-123",欢迎大家 ...

  4. 介绍C语言指针

    最近心态不太好,但是还是控制自己刷一下算法题,但是看着多次出现的 “Segmentation fault”,心态又爆炸啦.我只想说:“我也早觉得有写一点东西的必要了.离三月十八日也已有两星期,忘却的救 ...

  5. php中heredoc与nowdoc的使用方法

    一.heredoc结构及用法 Heredoc 结构就象是没有使用双引号的双引号字符串,这就是说在 heredoc 结构中单引号不用被转义.其结构中的变量将被替换,但在 heredoc 结构中含有复杂的 ...

  6. 【Spring系列】Spring mvc整合redis(非集群)

    一.在pom.xml中增加redis需要的jar包 <!--spring redis相关jar包--> <dependency> <groupId>redis.cl ...

  7. 201621123060《JAVA程序设计》第八周学习总结

    1. 本周学习总结 以你喜欢的方式(思维导图或其他)归纳总结集合相关内容. 2. 书面作业 1. ArrayList代码分析 1.1 解释ArrayList的contains源代码 源代码: publ ...

  8. (转)如何在Eclipse中查看JDK类库的源代码

    在Eclipse中查看JDK类库的源代码!!! 设置: 1.点 “window”-> "Preferences" -> "Java" -> & ...

  9. 在Apache中运行Python WSGI应用

    我们介绍如何使用Apache模块mod_wsgi来运行Python WSGI应用. 安装mod_wsgi 我们假设你已经有了Apache和Python环境,在Linux或者Mac上,那第一步自然是安装 ...

  10. 《招一个靠谱的移动开发》iOS面试题及详解(上篇)

    以下问题主要用于技术的总结与回顾 主要问题总结 单例的写法.在单利中创建数组应该注意些什么. NSString 的时候用copy和strong的区别. 多线程.特别是NSOperation 和 GCD ...