【问题标题】:substring with multiple delimiters具有多个分隔符的子字符串
【发布时间】:2018-10-04 21:34:11
【问题描述】:

我有一个如下所示的字符串:

/Company/Business 1/Business 2/Business 3/Business 4...

我正在寻找一个子字符串,我只提取业务 2 的信息

有人可以帮忙吗?我遇到了问题,因为 Business 3 和 Business 4 中的信息长度不同

【问题讨论】:

  • 什么是数据库引擎? Oracle、PostgreSQL、MySQL 等
  • 如果我是你,我会研究正则表达式。此外,如果您在字符串中包含更多细节也会有所帮助。

标签: sql substring csv


【解决方案1】:

以下使用 SQL 查询的解决方案:

我已经创建了 SQL 函数来拆分和按记录位置搜索,

函数参数为输入字符串、分隔符和记录号

SQL 函数 -

CREATE FUNCTION [dbo].[SplitString]  ( 
    @string NVARCHAR(MAX), 
    @delimiter CHAR(1),     @record int  )  RETURNS @output TABLE(splitdata NVARCHAR(MAX)  )  BEGIN 
    DECLARE @start INT, @end INT, @rownumber INT = 0 
    SELECT @start = 1, @end = CHARINDEX(@delimiter, @string) 
    WHILE @start < LEN(@string) + 1     BEGIN       SET @rownumber = @rownumber + 1
        IF @end = 0  
            SET @end = LEN(@string) + 1

        IF(@rownumber = @record)        BEGIN           INSERT INTO @output (splitdata)             VALUES(SUBSTRING(@string, @start, @end - @start))       END
        SET @start = @end + 1 
        SET @end = CHARINDEX(@delimiter, @string, @start)

    END 
    RETURN  END

选择查询 -

SELECT * FROM dbo.SplitString('/Company/Business 1/Business 2/Business 3/Business 4','/',4)

结果:

业务 2

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2017-10-29
  • 1970-01-01
  • 2021-11-10
  • 1970-01-01
  • 2012-05-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多