SQL 反转字符串

如何编写 SQL Server 查询来反转字符串中的每个单词并附带示例?反转字符串是您在面试中可能会遇到的标准面试问题之一。

SQL 按单词反转字符串示例

SUBSTRING 函数允许您提取和显示字符串的一部分。在此 SQL Server 示例中,我们向您展示如何选择空格符号之前的字符串并反转这些单词。

DECLARE @Source VARCHAR(MAX)
DECLARE @Destination VARCHAR(MAX)
DECLARE @Length INT 

SET @Source = 'Welcome to SQL Server Tutorial Service at Tutorial Gateway'
SET @Destination = ''

WHILE LEN(@Source) > 0
  BEGIN
    IF CHARINDEX(' ', @Source) > 0
    BEGIN
	SET @Destination = SUBSTRING(@Source, 0, CHARINDEX(' ', @Source)) + ' ' + @Destination
	SET @Source = LTRIM(RTRIM(SUBSTRING(@Source, CHARINDEX(' ', @Source) + 1, LEN(@Source))))
    END
    ELSE
    BEGIN
	SET @Destination = @Source + ' ' + @Destination
	SET @Source = ''
    END
  END

SELECT @Destination
SQL Reverse String Words 1

首先,我们使用 DECLARE 语句声明了三个变量。接下来,我们使用 WHILE 循环 迭代 @Source 中的每个字符。对于 SQL Server WHILE 循环内的条件,我们使用 LEN 函数来检查源的长度是否大于 0。

在 SQL Server 反转字符串示例的 while 循环中,我们使用 SUBSTRING 函数来设置 @Destination 的值。它允许三个参数:源、起点和终点。在这里,我们分配了

  • Source 为 @Source,或者您可以使用列名
  • 接下来,我们将起点设置为 0。
  • 接下来,我们使用 CHARINDEX 函数查找“ ”,以便终点位于空格之前。
  • 最后,我们将它添加到 @Destination,它在循环开始时是空的。

为了设置 @Source 值(即更新 @source 变量),我们使用 SUBSTRING 函数。在这里,我们分配了

  • Source 为 @Source,或者您可以使用列名。
  • 接下来,我们使用 CHARINDEX 函数查找空格,然后加 1。这样起点就在空格之后。
  • 最后,我们使用 LEN 函数来指定结束值。

从以上分析中,您可以观察到:

  • SET @Destination 意味着我们正在提取从索引 0 开始到空格之前的所有单词。这将是第一个单词。
  • 一旦我们获得第一个单词,我们将使用 SET @Source 代码从 @Source 中删除该单词。

SQL 按单词反转字符串示例 2

虽然上面的示例将返回结果,但我们希望将反转的字符串包装在用户定义函数中。我建议您参考 用户定义 文章以获得更好的理解。

CREATE FUNCTION [ReverseStringWords]
(
    @Source VARCHAR(MAX)
)
RETURNS VARCHAR(MAX)  
BEGIN
         
   DECLARE @Destination VARCHAR(MAX)
   SET @Destination = '' 
    
   DECLARE @Length INT
     
   WHILE LEN(@Source) > 0
   BEGIN
      IF CHARINDEX(' ', @Source) > 0
      BEGIN
         SET @Destination = SUBSTRING(@Source, 0, CHARINDEX(' ', @Source)) + ' ' + @Destination
         SET @Source = LTRIM(RTRIM(SUBSTRING(@Source, CHARINDEX(' ', @Source) + 1, LEN(@Source))))
      END
      ELSE
      BEGIN
         SET @Destination = @Source + ' ' + @Destination
         SET @Source = ''
      END
   END          
   RETURN @Destination
END

我们可以通过两种方式找到用户定义函数。请导航到包含该函数的数据库 -> 可编程性 -> 标量值函数 -> functionName。接下来,右键单击函数名称将打开上下文菜单。在这里,请选择“脚本函数为”->“选择到”->“新查询编辑器窗口”选项。

SQL Reverse String Words 2

或者编写以下代码片段来反转字符串。

-- Example

SELECT [dbo].[ReverseStringWords]('Welcome To SQL Server Tutorial Service at Tutorial Gateway')
GO
Reverse String Words 3