SQL Server - 在许多/之间获取一个单词

标签 sql sql-server

我需要在包含许多条的行中获取某个单词。举个例子:

WORD1/WORD2/WORD3/WORD4/WORD5

我需要专门获取WORD 3和/或WORD 4。 我尝试使用 CHARINDEXSUBSTRING 但无法为此编写可靠的代码。

(我正在使用 Microsoft SQL Server)

谢谢

最佳答案

如果您的位置数量已知或最大,这里有一个使用少量 XML 的说明。

注意:如果您的字符串位于表中,则很容易嵌套在 CROSS APPLY 中甚至作为 TVF。

示例

Declare @S varchar(max) = 'WORD1/WORD2/WORD3/WORD4/WORD5'

Select Pos1 = xDim.value('/x[1]','varchar(max)')
      ,Pos2 = xDim.value('/x[2]','varchar(max)')
      ,Pos3 = xDim.value('/x[3]','varchar(max)')
      ,Pos4 = xDim.value('/x[4]','varchar(max)')
      ,Pos5 = xDim.value('/x[5]','varchar(max)')
      ,Pos6 = xDim.value('/x[6]','varchar(max)')
      ,Pos7 = xDim.value('/x[7]','varchar(max)')
      ,Pos8 = xDim.value('/x[8]','varchar(max)')
      ,Pos9 = xDim.value('/x[9]','varchar(max)')
From  ( values (cast('<x>' + replace((Select replace(@S,'/','§§Split§§') as [*] For XML Path('')),'§§Split§§','</x><x>')+'</x>' as xml))) as A(xDim)

返回

Pos1    Pos2    Pos3    Pos4    Pos5    Pos6    Pos7    Pos8    Pos9
WORD1   WORD2   WORD3   WORD4   WORD5   NULL    NULL    NULL    NULL

编辑 - 如果您的数据在表中

Declare @YourTable table (id int,SomeCol varchar(max))
Insert Into @YourTable values
(1,'WORD1/WORD2/WORD3/WORD4/WORD5')

Select A.ID
      ,B.*
 From  @YourTable A
 Cross Apply (
                Select Pos1 = xDim.value('/x[1]','varchar(max)')
                      ,Pos2 = xDim.value('/x[2]','varchar(max)')
                      ,Pos3 = xDim.value('/x[3]','varchar(max)')
                      ,Pos4 = xDim.value('/x[4]','varchar(max)')
                      ,Pos5 = xDim.value('/x[5]','varchar(max)')
                      ,Pos6 = xDim.value('/x[6]','varchar(max)')
                      ,Pos7 = xDim.value('/x[7]','varchar(max)')
                      ,Pos8 = xDim.value('/x[8]','varchar(max)')
                      ,Pos9 = xDim.value('/x[9]','varchar(max)')
                From  ( values (cast('<x>' + replace((Select replace(SomeCol,'/','§§Split§§') as [*] For XML Path('')),'§§Split§§','</x><x>')+'</x>' as xml))) as X(xDim)
             ) B

返回

ID  Pos1    Pos2    Pos3    Pos4    Pos5    Pos6    Pos7    Pos8    Pos9
1   WORD1   WORD2   WORD3   WORD4   WORD5   NULL    NULL    NULL    NULL

关于SQL Server - 在许多/之间获取一个单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60544962/

相关文章:

PHP 或 MYSQL : how to group results by ROW?

mysql - 从一张表中选择 : single-row subquery returns more than one row

sql - 从带参数的集合返回函数插入表

sql - 如何根据 HiveQL 和 SQL 中特定列的子字符串进行选择?

node.js - 使用node-mssql在NodeJS中批量执行准备好的语句?

c++ - 排序a、b、c是否等价于排序c;对 b 进行排序;排序一个?

mysql - 编写查询以获得所需的 SQL 表输出

sql-server - 在 MS SQL Server 中将日期存储为整数是否有任何性能优势

sql - 在插入触发器上从表 1 插入到表 2

sql-server - SQL Server : simulate full-text search - other ways to do similar searches