簡體   English   中英

SQL換行符根據條件

[英]SQL Line break based on condition

SELECT之后,我得到的價值是這樣的:

Basic:           3 Years/36,000 Miles    Drivetrain:           3 Years/36,000 Miles    Corrosion:           6 Years/100,000 Miles    Roadside Assistance:           3 Years/36,000 Miles

我希望它分成兩列:

    Text          Value

    Basic        3 Years/36,000 Miles
    Drivetrain   3 Years/36,000 Miles

etc

等等

注意 :

Basic:-----------3 Years/36,000 Miles -之間有11個空格

3 Years/36,000 Miles----Drivetrain: - 之間有4個車位

這對您的樣本很好用,但是您必須對真實數據進行測試才能確定。

WITH CTE_StringSplit AS
(
    SELECT CAST(NULL AS NVARCHAR(MAX)) AS [Text],  CAST(NULL AS NVARCHAR(MAX)) AS [Value] ,  CAST([Text] AS NVARCHAR(MAX)) AS RemainingText 
    FROM Info
    UNION ALL
    SELECT 
      SUBSTRING(RemainingText,0,CHARINDEX('           ',RemainingText))
      ,LTRIM(SUBSTRING(RemainingText,CHARINDEX('           ',RemainingText),CASE WHEN CHARINDEX('    ',LTRIM(SUBSTRING(RemainingText,CHARINDEX('           ',RemainingText),DATALENGTH(RemainingText)))) > 0 THEN CHARINDEX('    ',LTRIM(SUBSTRING(RemainingText,CHARINDEX('           ',RemainingText),DATALENGTH(RemainingText)))) ELSE DATALENGTH(RemainingText) END + 11))
      ,LTRIM(SUBSTRING(RemainingText,11 + CHARINDEX('           ',RemainingText) + CASE WHEN CHARINDEX('    ',LTRIM(SUBSTRING(RemainingText,CHARINDEX('           ',RemainingText),DATALENGTH(RemainingText)))) > 0 THEN CHARINDEX('    ',LTRIM(SUBSTRING(RemainingText,CHARINDEX('           ',RemainingText),DATALENGTH(RemainingText)))) ELSE DATALENGTH(RemainingText) END,DATALENGTH(RemainingText)))
     FROM CTE_StringSplit
     WHERE LEN(RemainingText)>0
)
SELECT [Text],[Value]
FROM CTE_StringSplit
WHERE [Text] IS NOT NULL

如果需要更正,請用其他示例更新問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM