深入讲解SQL中的字符串拼接

作者:rain man 时间:2024-01-23 17:52:00 

一、概述

相信大家在日常开发中,在SQL语句中经常需要进行字符串拼接,以sqlserver,oracle,mysql三种数据库为例,因为这三种数据库具有代表性。

sqlserver:


select '123'+'456';

oracle:


select '123'||'456' from dual;



select concat('123','456') from dual;

mysql:


select concat('123','456');

注意:SQL Server中没有concat函数(SQL Server 2012已新增concat函数)。oracle和mysql中虽然都有concat,但是oracle中只能拼接2个字符串,所以建议用||的方式;mysql中的concat则可以拼接多个字符串。

在SQL Server中的“+”号除了能够进行字符串拼接外,还可以进行数字运算,在进行字符串拼接时要小心使用。下面以“Users”表为例,进行详细分析:

深入讲解SQL中的字符串拼接

二、数字 + 字符串

2.1 int + varchar


SELECT id + place FROM Users WHERE id = 1; //提示错误“在将 varchar 值 'bzz' 转换成数据类型 int 时失败”
SELECT id + place FROM Users WHERE id = 5; //提示错误“在将 varchar 值 '102.34' 转换成数据类型 int 时失败”

SELECT id + place FROM Users WHERE id = 4; //返回int “105”

2.2 decimal + varchar


SELECT *, id + cost FROM Users WHERE id = 4 OR id = 5; //返回decimal “102.98”和“104.30”

SELECT *, place + cost FROM Users WHERE id = 1; //提示错误“从数据类型 varchar 转换为 numeric 时出错。”

由此可见,系统会将字符串varchar类型转化为int,若不能转换则提示错误,转换成功则进行数字计算。

三、数字 + 数字

数字指的是int、decimal等类型。数字 +  数字,则进行数字相加,若某字段为NULL,则计算结果为NULL。


SELECT *, uage + cost AS 'uage + cost' FROM Users

深入讲解SQL中的字符串拼接

四、字符串 + 字符串

字符串 + 字符串,则直接进行拼接。若某字段为NULL,则计算结果为NULL。


SELECT *, uname + place AS 'uname + place' FROM Users

深入讲解SQL中的字符串拼接

五、使用CAST和CONVERT函数进行类型转换

通过上述实例,可以看出若要使用“+”进行字符串拼接或数字计算,最稳妥的方法是进行类型转换。

  • CAST()函数可以将某种数据类型的表达式转化为另一种数据类型

  • CONVERT()函数也可以将制定的数据类型转换为另一种数据类型

要求:将“678”转化为数值型数据,并与123相加进行数学运算。


SELECT CAST('678' AS INT) + 123;
SELECT CONVERT(INT, '678') + 123;

要求:id列和place列进行字符串拼接。


SELECT *, CONVERT(varchar(10), id) + place FROM Users;

字符串拼接后的字符串不能简单作为“筛选字段”

有时,需要列A = 变量1,列B = 变量2的筛选,为了简化SQL语句 列A + 列B = 变量1 + 变量2。这种方法并不完全准确


SELECT * FROM Users WHERE uname + place = 'aabzz';

深入讲解SQL中的字符串拼接


SELECT * FROM Users WHERE uname = 'aa' AND place = 'bzz';

深入讲解SQL中的字符串拼接

为了防止上述情况的发生,可以再列A和列B之间加上一个较特殊的字符串。


SELECT * FROM Users WHERE uname + 'rain@&%$man' + place = 'aa' + 'rain@&%$man' + 'bzz'

来源:http://www.cnblogs.com/rainman/p/6203065.html

标签:sql,字符串拼接
0
投稿

猜你喜欢

  • Python办公自动化SFTP详解

    2021-10-11 13:04:27
  • SQL Server中通过reverse取某个最后一次出现的符号后面的内容(字符串反转)

    2012-07-11 15:59:36
  • Rs.Open参数说明

    2008-05-12 22:43:00
  • 基于Python模拟浏览器发送http请求

    2023-01-11 22:22:05
  • 自学python的建议和周期预算

    2021-10-07 04:38:09
  • python 列表推导和生成器表达式的使用

    2021-03-16 11:21:39
  • Python代码注释规范代码实例解析

    2023-03-15 04:59:56
  • python逐行读取文件内容的三种方法

    2023-01-05 14:07:30
  • Go语言同步与异步执行多个任务封装详解(Runner和RunnerAsync)

    2024-05-28 16:14:16
  • Scrapy模拟登录赶集网的实现代码

    2023-02-22 20:33:47
  • Python判断某个用户对某个文件的权限

    2023-12-15 01:25:27
  • 如何在Django配置文件里配置session链接

    2022-09-08 18:17:33
  • laravel修改用户模块的密码验证实现

    2023-06-14 12:37:18
  • 关于python常见异常以及处理方法

    2021-03-17 06:13:34
  • 浅谈Mybatis+mysql 存储Date类型的坑

    2024-01-17 19:13:14
  • Python文件去除注释的方法

    2023-09-02 06:56:17
  • 服务器端控件是如何操作的?

    2009-11-01 15:22:00
  • 老生常谈CSS网页布局的意义与副作用

    2008-09-12 12:31:00
  • 用Mimer Validator检查SQL查询

    2024-01-24 17:12:01
  • Linux下MySQL数据库的主从同步复制配置

    2024-01-19 12:36:41
  • asp之家 网络编程 m.aspxhome.com