如何在SQL Server中的特定字符后拆分字符串?

时间:2022-09-13 09:23:00

I have followed problem: I have one column, which contains a lot of strings. Something like this:

我跟着问题:我有一个列,其中包含很多字符串。像这样的东西:

"Shop/Kaufprozess/Zahlungsart u. Zustellung"

The first two words are always different. This could be for example

前两个词总是不同的。这可能是例如

"HTML-Title/Kaufprozess/Zahlungsart u. Zustellung" 

or

要么

"Info/Template/Zahlungsart u. Zustellung“  
"tpl_landingpage/Kaufprozess/Zahlungsart u. Zustellung“ etc.

From this string, I want to have only first two wards! Example: Original text:

从这个字符串,我想只有前两个病房!示例:原始文本:

„Shop/Kaufprozess/Zahlungsart u. Zustellung“

I want to keep: Shop/Kaufprozess

我想保留:Shop / Kaufprozess

How can I do this?

我怎样才能做到这一点?

Thank you!

谢谢!

2 个解决方案

#1


3  

SOLUTION

DECLARE @ AS VARCHAR(MAX) = 'Shop/Kaufprozess/Zahlungsart u. Zustellung'
SELECT SUBSTRING (@,1, CHARINDEX('/',@, CHARINDEX('/',@,0)+1) - 1 )

OUTPUT

OUTPUT

    --------------------
    Shop/Kaufprozess

(1 row affected)

#2


0  

Try this code

试试这个代码

DECLARE @DataGet TABLE (id INT IDENTITY,String varchar(300))

INSERT INTO @DataGet
SELECT 'Shop/Kaufprozess/Zahlungsart u. Zustellung' UNION ALL
SELECT 'Info/Template/Zahlungsart u. Zustellung'    UNION ALL
SELECT 'tpl_landingpage/Kaufprozess/Zahlungsart u. Zustellung'


;WITH cte 
     AS (SELECT 1                      AS Seq, 
                id, 
                CHARINDEX('/', string) AS Pos, 
                string 
         FROM   @DataGet 
         UNION ALL 
         SELECT seq + 1, 
                id, 
                CHARINDEX('/', string, pos + 1) AS Pos, 
                string 
         FROM   cte 
         WHERE  pos > 0 
                AND seq <= 2) 
SELECT string,SUBSTRING(string, 0, pos)AS ReqString 
FROM   (SELECT *, 
               ROW_NUMBER () 
                 OVER( 
                   partition BY id 
                   ORDER BY seq ) AS Dup 
        FROM   cte 
        WHERE  pos > 0)dt 
WHERE  dup = 2 
ORDER  BY dt.id, 
          dt.dup ASC 

Result

结果

String                                                  ReqString
-----------------------------------------------------------------------------------
Shop/Kaufprozess/Zahlungsart u. Zustellung              Shop/Kaufprozess
Info/Template/Zahlungsart u. Zustellung                 Info/Template
tpl_landingpage/Kaufprozess/Zahlungsart u. Zustellung   tpl_landingpage/Kaufprozess

#1


3  

SOLUTION

DECLARE @ AS VARCHAR(MAX) = 'Shop/Kaufprozess/Zahlungsart u. Zustellung'
SELECT SUBSTRING (@,1, CHARINDEX('/',@, CHARINDEX('/',@,0)+1) - 1 )

OUTPUT

OUTPUT

    --------------------
    Shop/Kaufprozess

(1 row affected)

#2


0  

Try this code

试试这个代码

DECLARE @DataGet TABLE (id INT IDENTITY,String varchar(300))

INSERT INTO @DataGet
SELECT 'Shop/Kaufprozess/Zahlungsart u. Zustellung' UNION ALL
SELECT 'Info/Template/Zahlungsart u. Zustellung'    UNION ALL
SELECT 'tpl_landingpage/Kaufprozess/Zahlungsart u. Zustellung'


;WITH cte 
     AS (SELECT 1                      AS Seq, 
                id, 
                CHARINDEX('/', string) AS Pos, 
                string 
         FROM   @DataGet 
         UNION ALL 
         SELECT seq + 1, 
                id, 
                CHARINDEX('/', string, pos + 1) AS Pos, 
                string 
         FROM   cte 
         WHERE  pos > 0 
                AND seq <= 2) 
SELECT string,SUBSTRING(string, 0, pos)AS ReqString 
FROM   (SELECT *, 
               ROW_NUMBER () 
                 OVER( 
                   partition BY id 
                   ORDER BY seq ) AS Dup 
        FROM   cte 
        WHERE  pos > 0)dt 
WHERE  dup = 2 
ORDER  BY dt.id, 
          dt.dup ASC 

Result

结果

String                                                  ReqString
-----------------------------------------------------------------------------------
Shop/Kaufprozess/Zahlungsart u. Zustellung              Shop/Kaufprozess
Info/Template/Zahlungsart u. Zustellung                 Info/Template
tpl_landingpage/Kaufprozess/Zahlungsart u. Zustellung   tpl_landingpage/Kaufprozess