如果數據具有相同的結構,這個查詢應該工作:
DECLARE @TEXT VARCHAR(255) = 'Provider - Category: General: Entry (1)';
SELECT SUBSTRING(@TEXT,1,CHARINDEX('-',@TEXT)-1) AS COL1
,SUBSTRING(@TEXT,CHARINDEX('-',@TEXT)+2,CHARINDEX(':',@text)- 2 - CHARINDEX('-',@text)) AS COL2
,SUBSTRING(@TEXT,CHARINDEX(':',@TEXT)+2,CHARINDEX('(',@TEXT)- 2 - CHARINDEX(':',@TEXT)) AS COL3
,SUBSTRING(@TEXT,CHARINDEX('(',@TEXT)+1,CHARINDEX(')',@TEXT)- 1 - CHARINDEX('(',@TEXT)) AS COL4
輸出:
Col1 Col2 Col3 Col4
Provider Category General: Entry 1
編輯基於評論:
DECLARE @TEXT VARCHAR(255) = 'Provider - Category: General: Entry (HD) (1)';
SELECT SUBSTRING(@TEXT,1,CHARINDEX('-',@TEXT)-1) AS COL1
,SUBSTRING(@TEXT,CHARINDEX('-',@TEXT)+2,CHARINDEX(':',@text)- 2 - CHARINDEX('-',@text)) AS COL2
,SUBSTRING(@TEXT,CHARINDEX(':',@TEXT)+2,CHARINDEX('(',@TEXT)- 2 - CHARINDEX(':',@TEXT)) AS COL3
--,SUBSTRING(@TEXT,CHARINDEX('(',@TEXT)+1,CHARINDEX(')',@TEXT)- 1 - CHARINDEX('(',@TEXT)) AS COL4
,REVERSE(SUBSTRING(REVERSE(@TEXT),2,CHARINDEX('(',(REVERSE(@TEXT))) - CHARINDEX(')',REVERSE(@TEXT))-1)) as COL4
有了這一點,不不管你是否有'Provider - Category: General: Entry (HD) (1)'
或'Provider - Category: General: Entry (HD) (1)'
,輸出是無論如何:
Col1 Col2 Col3 Col4
Provider Category General: Entry 1
它唯一不包含(HD)
。但是,您可以將兩個解決方案與@TEXT NOT LIKE '%HD%'
和@TEXT LIKE '%HD%'
結合,然後使用UNION ALL作爲解決方法。
您正在使用哪些DBMS? –
數據總是相同嗎?或者他們可以改變?如果標點符號可能會改變。 – DNac
使用SQL 2012,我剛剛注意到,有時數據可能在'General:Entry(HD)(1)'中有另一組圓括號' –