使用字符串数据

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

  • 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. JSON解析的几种方式

    在开发中,网络请求和json解析使用的频率是一样高的,因为网络请求返回来的一般都是json(当然还有xml),这里讨论的是json,网络请求的工具类前面我的博客已经写过了,这里给出网址:http:// ...

  2. ES6 中 Promise 详解

    Promise,简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果.从语法上说,Promise 是一个对象,从它可以获取异步操作的消息.Promise 提供统一的 API ...

  3. 打印十字图 JAVA 递归实现

    这个是我自己想的,头疼了一个下午,不过还好.做出来了.在网上找这道题但没有找到用递归的做法. /*递归思想实现 * 标题:打印十字图 小明为某机构设计了一个十字型的徽标(并非红十字会啊),如下所示(可 ...

  4. Struts2学习笔记二 配置详解

    Struts2执行流程 1.简单执行流程,如下所示: 在浏览器输入请求地址,首先会被过滤器处理,然后查找主配置文件,然后根据地址栏中输入的/hello去每个package中查找为/hello的name ...

  5. Struts2学习笔记四 OGNL

    OGNL,全称为Object-Graph Navigation Language(对象图表达语言),它是一个功能强大的表达式语言,用来获取和设置Java对象的属性,调用java对象的方法,同时能够自动 ...

  6. Transaction 事务简单详解

    Transaction 也就是所谓的事务了,通俗理解就是一件事情.从小,父母就教育我们,做事情要有始有终,不能半途而废. 事务也是这样,不能做一半就不做了,要么做完,要么就不做.也就是说,事务必须是一 ...

  7. Leetcode 12——Integer to Roman

    12.Integer to Roman Given an integer, convert it to a roman numeral. Input is guaranteed to be withi ...

  8. 【福大软工】 W班级总成绩排名3

    评分链接: alpha测试    软件产品案例分析 总分排名: 团队千帆竞发图 总结: 本次排名是alpha测试    软件产品案例分析 两次排名的汇总. 1.alpha测试小组评价: 听说:10篇冲 ...

  9. mobiscroll2.5.4 日期组件

    <script type="text/javascript"> function setCss(o) { $('input:jqmData(role="dat ...

  10. 《Language Implementation Patterns》之 增强解析模式

    上一章节讲述了基本的语言解析模式,LL(k)足以应付大多数的任务,但是对一些复杂的语言仍然显得不足,已付出更多的复杂度.和运行时效率为代价,我们可以得到能力更强的Parser. Pattern 5 : ...