sql-server 如何在sql server中查找字符串中的特殊字符并拆分成单词?

3yhwsihp  于 2022-10-31  发布在  SQL Server
关注(0)|答案(2)|浏览(381)

我有这样的字符串“铃木GSX_1300/双轮车”
现在我想把上面的字符串拆分成单词,并把一个一个的单词插入到一个表中。

DECLARE @a TABLE (a nvarchar(500));
declare @RTADESC nvarchar(100) = 'SUZUKI GSX_1300/TWOWHEELER';
declare @b int =1;
declare @c int;
set @c=CHARINDEX('_',@RTADESC,@b);

WHILE @c>0
        BEGIN
            SELECT @b= CHARINDEX('_' ,@RTADESC,@b)+1
            INSERT INTO @a
            SELECT SUBSTRING(@RTADESC,0,@b-1)
            set @c=CHARINDEX('_',@RTADESC,@b)
        END

        SELECT * FROM @a

现在我想看看表@a中的数据如下

SUZUKI
GSX
1300
TWOWHEELER

基于此,我将在我的表中搜索车辆制造商。
因此,请帮助我如何可以拆分我的字符串,我可能会得到不同的特殊字符,以及在未来。

wj8zmpe1

wj8zmpe11#

以下网站提供了一些优秀的选项:http://www.sqlperformance.com/2012/07/t-sql-queries/split-strings
也有一些解决方案允许您传递分隔符,以便将来可以传递不同的分隔符。

5m1hhzi4

5m1hhzi42#

1.创建表函数func_SplitString

CREATE FUNCTION [dbo].[func_SplitString](@DelimitedString varchar(8000), @Delimiter varchar(100))
 RETURNS @tblArray TABLE ( ID int IDENTITY(1,1),Element varchar(1000))
 AS
 BEGIN
 -- Local Variable Declarations
 DECLARE @Index      smallint,
         @Start      smallint,
         @DelSize    smallint
 SET @DelSize = LEN(@Delimiter)
 -- Loop through source string and add elements to destination table array
 WHILE LEN(@DelimitedString) > 0
 BEGIN
     SET @Index = CHARINDEX(@Delimiter, @DelimitedString)
     IF @Index = 0
         BEGIN
             INSERT INTO @tblArray (Element) VALUES (LTRIM(RTRIM(@DelimitedString)))
             BREAK
         END
     ELSE
         BEGIN
             INSERT INTO   @tblArray (Element) VALUES (LTRIM(RTRIM(SUBSTRING(@DelimitedString, 1,@Index - 1))))
             SET @Start = @Index + @DelSize
             SET @DelimitedString = SUBSTRING(@DelimitedString, @Start , LEN(@DelimitedString) - @Start + 1)
         END
 END
 RETURN

结束
1.使用函数拆分字符串,如“SUZUKI GSX_1300/TWOWHEELER”

  • 将所有特殊字符替换为'_'
  • 使用函数拆分字符串
SELECT * FROM func_SplitString (REPLACE(REPLACE('SUZUKI GSX_1300/TWOWHEELER',' ','_'),'/','_'), '_')

相关问题