如何编写 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

首先,我们使用 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。接下来,右键单击函数名称将打开上下文菜单。在这里,请选择“脚本函数为”->“选择到”->“新查询编辑器窗口”选项。

或者编写以下代码片段来反转字符串。
-- Example
SELECT [dbo].[ReverseStringWords]('Welcome To SQL Server Tutorial Service at Tutorial Gateway')
GO
