使用sql连接字符串的巧妙方法

结构化查询语言(SQL)是一个非常强大的工具,它包含了很多特性。今天我们将向您展示有关SQL连接字符串的所有需要了解的内容。...

结构化查询语言(SQL)是一个非常强大的工具,它包含了很多特性。一旦您掌握了最重要的SQL命令,您就可以开始对SQL有更多的创造性了。今天我将向您展示有关SQL连接字符串的所有需要了解的内容。

sql-concatenation

有许多不同的SQL方言。对于所有这些示例,我使用的是PostgreSQL变体。

什么是串联(concatenation)?

连接意味着把两个东西连接在一起。您可能在编程语言中使用它将两个字符串连接在一起。也许您有一个名字和姓氏变量,作为全名变量连接在一起。

串联是将两个字符串组合成一个字符串的非常有用的方法。PHP使用句号将字符串连接在一起,而JavaScript和jQuery使用加号。

SQL中的串联工作原理完全相同。你用一个特殊的运算符把两件事合并成一件事。下面是一个伪代码示例:

first_name = Joelast_name = Coburnwhole_name = first_name + last_name

在编程语言中,串联使代码更易于阅读。如果您的代码总是需要访问两个字符串,那么将它们组合成一个字符串可以更容易记住,并减少代码的长度。

虽然SQL中的变量不太常见(但仍在使用),但仍然需要连接来返回组合结果或操作数据。

如何连接

连接在SQL中非常容易。虽然SQL是一种公共语言,但各个数据库引擎以不同的方式实现特性。虽然所有这些示例都是用PostgreSQL方言编写的,但只要在web上搜索“Concatenate<YOUR\DATABASE\u ENGINE>”就可以很容易地翻译成其他变体。不同的引擎可能有不同的语法来进行连接,但原理是一样的。

回到我们的name示例,下面是一个基本的select查询:

SELECT first_name, last_name, email FROM users_table

sql select

这里没有什么复杂的东西,所以让我们加入串联:

SELECT first_name || last_name AS full_name, email FROM users_table

sql basic concatenation

正如您所看到的,这种连接工作得很好,但是有一个小问题。结果的全名已经完全按照两列的乘积缝合在一起——名称之间应该有一个空格!

幸运的是,它很容易修复:只需在两者之间的一个空间进行连接:

SELECT first_name || ' ' || last_name AS full_name, email FROM users_table

sql concatenation space

这些都是基本的例子,但是你应该看看串联是如何工作的——真的很简单!管道运算符(|)在子句之间使用了两次。您的SQL引擎知道,此符号前后的每个部分都应该连接在一起并视为一个。但是要小心,如果您使用concat运算符但不连接任何内容,您将得到一个错误。

sql error

如上所述,这些示例使用SQL的PostgreSQL变体。其他变体可能使用不同的运算符,甚至需要调用的特殊函数。如果以数据库引擎所期望的方式连接字符串,那么如何连接字符串实际上并不重要。

深入

既然您已经了解了基础知识,那么让我们来看看一些深入的示例,以及一些常见的陷阱。

大多数数据库引擎将成功地合并字符串和整数,甚至日期。在尝试连接复杂类型(如数组)时,通常会遇到问题:

SELECT first_name || ' ' || last_name || ARRAY[123, 456] AS full_name, email FROM users_table

此代码将不起作用。无法将字符串与数组等复杂对象组合。如果你考虑你需要做什么,你通常可以写简单的代码,而不是复杂的,疯狂的代码无法运行。

如果您已经仔细考虑了需要做什么,但仍然无法让SQL正常工作,那么您是否考虑过使用编程语言?作为一个处理遗留代码的软件开发人员,我知道调试SQL的痛苦,因为有人在SQL中塞进了太多的逻辑,这是一个奇迹——如果你试图用SQL编写逻辑,那么就改用编程语言(有很多容易学的语言)。

串联对于where语句也非常有效:

SELECT first_name, last_name, email FROM users_table WHERE date_of_birth = ('DAY' || '/' || 'MONTH' || '/' || 'YEAR')::date

这里发生了一些事情。在本例中,DAY、MONTH和YEAR是从脚本传入的参数。可能是代码生成的,或者是用户输入的。它们连接在一起,然后转换为日期类型(使用PostgreSQL转换为日期语法::date)。

通过这种方式使用串联,可以将日期的各个部分链接在一起,然后可以将其作为“真实”日期处理,而不是字符串。不要忘记,这个基本示例并不能防止SQL注入,所以不要在没有修改的情况下在任何生产代码中使用它。

另一个要注意的陷阱是空值(空字符串是空的或不存在的字符串)。给出这个问题:

SELECT first_name || ' ' || NULL AS full_name, email FROM users_table

sql null concatenation

此查询以静默方式失败。这是由于连接是在数据库引擎上进行内部编码的方式造成的。你可能不会经常遇到这个问题,但这是很常见的事情。

如果您认为查询返回的数据可能为空,则需要使用coalesce。Coalesce大致可以被认为是“如果它为null,则用另一个字符串或列替换它”:

SELECT first_name || ' ' || COALESCE(NULL, 'ERROR NULL DATA') AS full_name, email FROM users_table

sql concatenation coalesce

现在您知道如何在SQL中使用连接,您将如何处理它?你会建立一个网站,并用SQL使之活跃起来吗?或者你可能需要一个静态站点生成器来更简单地构建网站。

无论你做什么,请在下面的评论中告诉我们!

  • 发表于 2021-03-13 07:05
  • 阅读 ( 231 )
  • 分类:编程

你可能感兴趣的文章

如何在windows上安装mysql数据库

...大多数应用程序连接到数据库通常只涉及一个特定的连接字符串,因此使用一个数据库服务器测试应用程序,然后将其切换到“生产”服务器非常简单。 ...

  • 发布于 2021-03-11 21:33
  • 阅读 ( 350 )

所有程序员都应该知道的13条最重要的sql命令

... 将返回单引号内的任何字符串,而不是与列名匹配的字符串。 ...

  • 发布于 2021-03-14 06:57
  • 阅读 ( 220 )

为您的网络设置lan唤醒控制面板

...取消注释第一个并保存更改。默认情况下,SQL Server连接字符串设置为使用具有可信身份验证的本地计算机。根据您的环境,您可能需要更改这些连接设置。 这个ASP.NET唤醒Lan包包含SQL数据库创建脚本,用于SQL Server上的安装程序...

  • 发布于 2021-04-13 12:18
  • 阅读 ( 175 )

jdbc语句(jdbc statement)和编制报表(preparedstatement)的区别

...。语句不能转义SQL注入,因为我们在JDBC中使用连接的SQL字符串。 报表与准备报表:比较图 总结 - jdbc语句的构造(of jdbc statement) vs. 编制报表(preparedstatement) JDBC语句和PreparedStatement接口定义了从SQL数据库发送和接收数据的方法和...

  • 发布于 2021-06-25 10:39
  • 阅读 ( 261 )

瓦尔查尔(varchar)和nvarchar公司(nvarchar)的区别

...数据类型。它描述了它可以存储的数据类型。程序员可以使用这些数据类型来创建表。 简而言之,varchar是一种数据类型,它描述一组长度不确定的字符数据。varchar数据类型的列可以保存字母和数字。它可以将数据保存到一定...

  • 发布于 2021-07-01 05:30
  • 阅读 ( 182 )

默认实例(default instance)和sql server中的命名实例(named instance in sql server)的区别

...许用户创建数据库并在数据库的表中排列数据。用户可以使用结构化查询语言来操作数据。SQL实例是sqlserver.exe可执行文件的副本。它是SQL server的安装。SQL server实例有两种类型:默认实例和命名实例。安装SQL server时,会出现“...

  • 发布于 2021-07-01 06:34
  • 阅读 ( 523 )

sql语句(sql)和tsql公司(tsql)的区别

...行事务、编写存储过程、视图、索引等等。有各种数字、字符串、日期函数。此外,还有聚合函数对一组值执行操作。 sql语句(sql)和tsql公司(tsql)的区别 定义 SQL是一种用于编程的特定于域的语言,用于管理关系数据库管理系统中...

  • 发布于 2021-07-01 14:22
  • 阅读 ( 545 )

烧焦(char)和瓦尔查尔(varchar)的区别

... 什么是烧焦(char)? char是一种有助于存储固定长度数据或字符串的数据类型。语法是char[n]。这里,n表示以字节为单位的字符串长度。因此,此数据类型可以存储固定长度的值。如果长度小于定义的大小,其余部分将填充空格字...

  • 发布于 2021-07-01 23:55
  • 阅读 ( 191 )

烧焦(char)和瓦尔查尔(varchar)的区别

...教授的编程语言是SQL。程序员用它来存储不同长度的数据字符串。两种常用的数据类型是“char”和“varchar”。烧焦(char) vs. 瓦尔查尔(varchar)Char和Varchar的区别在于Char只存储固定长度的单字符串数据类型,而Varchar存储不同字符串...

  • 发布于 2021-07-10 05:39
  • 阅读 ( 195 )

microsoft sql server中的非空约束

...erver中的非空约束指定列不能包含空值。 Null与零或零字符串不同。Null表示未进行任何输入。 在数据库列上创建新的NOTNULL约束时,SQL Server会检查该列的当前内容中是否存在任何空值。如果列当前包含空值,则约束创建失败...

  • 发布于 2021-09-06 15:24
  • 阅读 ( 133 )
efbgbb04
efbgbb04

0 篇文章

相关推荐