2014-02-15 41 views
2

如何獲得我表格中的數據中間部分?我嘗試了下面的代碼,但是這只是刪除了正確的部分...我的輸出應該只是中間部分。如何在SQL Server中分隔破折號分隔值?

例如,當我選擇數據1-021514-1輸出應該是021514沒有左,右劃

select LEFT(ticketid, CHARINDEX('-', ticketid + '-') + 4) 
from Table 

我的數據是:

|TicketID | 
------------ 
|1-021514-1 | 
|10-021514-1| 
|2-021514-1 | 
|4-021414-1 | 
+0

可能是您正在尋找拆分功能。 [here](http://stackoverflow.com/questions/2647/split-string-in-sql)就是一個例子。 –

回答

0

試試這個:

select right(left(ticketid, charindex('-', ticketid, charindex('-', ticketid, 0) + 1) - 1), len(left(ticketid, charindex('-', ticketid, charindex('-', ticketid, 0) + 1) - 1)) - charindex('-', left(ticketid, charindex('-', ticketid, charindex('-', ticketid, 0) + 1) - 1), 0)) from Table 
2

請嘗試:

SELECT 
    LEFT(st, CHARINDEX('-', st)-1) TicketID 
from 
(
    SELECT 
     SUBSTRING(TicketID, CHARINDEX('-',TicketID)+1, 10000) st 
    FROM Table 
)x 
1

試試這個

with t as (select TicketID as val) 
select t.*, 
     LEFT(val, charindex('-', val) - 1), 
    SUBSTRING(val, charindex('-', val)+1, len(val) - CHARINDEX('-', reverse(val)) - charindex('-', val)), 
     REVERSE(LEFT(reverse(val), charindex('-', reverse(val)) - 1)) 
from t; 

(OR)

使用以下功能

CREATE FUNCTION dbo.SplitStrings_CTE(@List nvarchar(max), @Delimiter nvarchar(1)) 
RETURNS @returns TABLE(val nvarchar(max), [level] int, PRIMARY KEY CLUSTERED([level])) 
AS 
BEGIN 
;WITH cte AS 
(
    SELECT SUBSTRING(@List, 0, CHARINDEX(@Delimiter, @List)) AS val, 
     CAST(STUFF (@List + @Delimiter, 1, CHARINDEX(@Delimiter, @List), '') AS nvarchar(max)) AS stval, 
     1 AS [level] 
    UNION ALL 
    SELECT SUBSTRING(stval, 0, CHARINDEX(@Delimiter, stval)), 
     CAST(STUFF (stval, 1, CHARINDEX(@Delimiter, stval), '') AS nvarchar(max)), 
     [level] + 1 
    FROM cte 
    WHERE stval != '' 
) 
    INSERT @returns 
    SELECT REPLACE(val, ' ', '') AS val, [level] 
    FROM cte 
    RETURN 
END 
0

試試這個

SELECT STUFF(
       STUFF(TicketID,1,CHARINDEX('-',TicketID,1),'') 
       ,CHARINDEX('-',STUFF(TicketID,1,CHARINDEX('-',TicketID,1),''),1) 
       ,LEN(TicketID) 
       ,'') 
     from Table1 
1

喜羅恩試試這個,

declare @string varchar(25)='1-021514-1' 
     declare @val varchar(25) 
     SELECT @val= SUBSTRING(@string, CHARINDEX('-', @string)+1, ((CHARINDEX('-',@string,(charindex('-',@string)+1))-CHARINDEX('-', @string))-1)) 
     select @val 
相關問題