SQL 中的字符串连接

-->

1。概述

SQL语句中经常需要进行字符串拼接。以sqlserver、oracle、mysql这三个数据库为例,因为这三个数据库具有代表性。

sqlserver:

选择“123”+“456”;

神谕:

从双选择“123”||“456”;

从对偶中选择 concat('123','456');

mysql:

选择 concat('123','456');

注意:SQL Server中没有concat函数(SQL Server 2012添加了concat函数)。虽然Oracle和MySQL都有concat,但是Oracle只能拼接2个字符串,所以建议使用||; MySQL中的concat可以拼接多个字符串。

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

2。数字+字符串

2.1 int + varchar

从用户中选择 id + 位置,其中 id = 1; //提示错误“Failed to conversion varchar value 'bzz' to data type int”
从用户中选择 id + 地点,其中 id = 5; //提示错误“无法将varchar值'102.34'转换为int数据类型”
从用户中选择 id + 地点,其中 id = 4; //返回整数“105”

2.2 十进制 + varchar

从用户中选择 *、id + 成本,其中 id = 4 或 id = 5; //返回十进制“102.98”和“104.30” 选择 *,位置 + 成本来自用户,其中 id = 1; //提示错误“Error conversion from data type varchar to numeric.”

可以看到系统会将string varchar类型转换为int。如果无法转换,会提示错误。如果转换成功,将进行数值计算。

3。数字+数字

数字是指int、decimal等类型。 Number + Number,数字相加。如果某个字段为NULL,则计算结果为NULL。

从用户中选择*,用量+成本作为“用量+成本”

4.绳子+绳子

字符串+字符串,然后直接连接。如果某个字段为NULL,则计算结果为NULL。

从用户中选择*、uname + place AS“uname + place”

5。使用 CAST 和 CONVERT 函数进行类型转换

通过上面的例子可以看出,如果要使用“+”进行字符串拼接或者数值计算,最安全的方式就是进行类型转换。

  • CAST()函数可以将一种数据类型的表达式转换为另一种数据类型
  • CONVERT()函数还可以将指定的数据类型转换为另一种数据类型

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

选择 CAST('678' AS INT) + 123;
选择转换(INT,'678')+ 123;

需求:id列和place列的字符串串联。

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

字符串拼接后的字符串不能简单地用作“过滤字段”

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

从用户中选择 * WHERE uname + place = 'aabzz';

从用户中选择 * WHERE uname = 'aa' AND place = 'bzz';

为了防止上述情况发生,可以在A列和B列之间添加特殊字符串。

-->

相关文章