2014-07-11 137 views
0
SELECT 
    right(name,7), 
    substring(params, charindex('|-|', params)+3,LEN(params)) as 'List Name', 
    convert(varchar,dateadd(hh,-8,created_date), 101) as Date, 
    convert(char, dateadd(hh,-8,created_date), 108) as Time 
FROM 
    [meldb].[dbo].[mr_message] 
WHERE 
    name in ('CL_LIST_STARTED', 'CL_LIST_STOPPED') 
    AND dateadd(hh,-8,created_date) > '7/1/2014' 
ORDER BY 
    created_date ASC 

列表名稱將返回類似:刪除部分

firstname.lastname-|LISTNAME|-|PARENTLISTNAME 

我想LISTNAMEPARENTLISTNAME隔離在單獨的列,但由於它們可以在煤焦大小不等我可以」牛逼只需指定向左或向右

順便說一句我沒有創建使用它

任何想法,這個表我只是堅持?

+0

SQL Server,對嗎? – Barranka

+1

哪個數據庫? –

+0

sql服務器,對不起忘了指定 – lookslikeanevo

回答

1

你試過了嗎?
好......高興週五:)

declare @str varchar(100); 
set @str = 'jim.smith|-|firstItem|-|secondItem'; 



--- for your query, change @str to the column name, obviously --- 
select 
    substring(
        @str 
        , charindex('|-|', @str) + 3 
        , ((charindex('|-|', @str, charindex('|-|', @str) + 3)) - (charindex('|-|', @str) + 3)) 
       ) 
    ,substring(
        @str 
        , charindex('|-|', @str, charindex('|-|', @str) + 3) + 3 
        , len(@str) -- guaranteed to be past the end, to catch all 
       ) 
+0

不得不關閉第二個子字符串,但它應該工作:) – lookslikeanevo

+1

哦,它在那裏:)我喜歡比大多數人更多的線條...祝你週末愉快 –

+0

Mike!謝謝,我不包括第二個charindex,它讓我瘋狂!非常感激! – lookslikeanevo

1

是否要將params分爲三列?請檢查以下查詢。

SELECT 
    SUBSTRING(params, 1, CHARINDEX('-', params)-1) AS FullName, 
    SUBSTRING(STUFF(params, CHARINDEX('|-|', params), LEN(params), ''), CHARINDEX('-', params) + 2, LEN(params)) AS 'List Name', 
    SUBSTRING(params, CHARINDEX('|-|', params) + 3, LEN(params)) AS 'Parent List Name', 
    CONVERT(VARCHAR,DATEADD(hh,-8,created_date), 101) AS DATE, 
    CONVERT(CHAR, DATEADD(hh,-8,created_date), 108) AS TIME 
FROM 
    [meldb].[dbo].[mr_message] 
WHERE 
    name IN ('CL_LIST_STARTED', 'CL_LIST_STOPPED') 
    AND DATEADD(hh,-8,created_date) > '7/1/2014' 
ORDER BY 
    created_date ASC 
+0

關閉,但重新構建了以下三個列: 富勒名 - 第一。last list name - LISTNAME | - | PARENTLISTNAME(partial) 父列表名 - 列表名| - | PARENTLISTNAME(完整) – lookslikeanevo

+0

三列。 – Jesuraja

+0

您是否可以更新問題中的確切示例輸入和期望輸出? – Jesuraja

0

這裏是我想出了使用PAT索引的格式和你提到的分隔符:

SELECT name, 
substring(name, 0, charindex('.', name)) as 'FirstName', 
substring(name, charindex('.', name) + 1, patindex('%|-|%', name) - patindex('%-|%', name) -2) as 'LastName', 
substring(name,patindex('%-|%', name)+2, patindex('%|-|%', name) - patindex('%-|%', name)-2) as 'ListName', 
substring(name, patindex('%|-|%', name)+3, len(name) - patindex('%|-|%', name)) as 'ParentListName' 
from FancyNames 

鏈接到SQL小提琴:http://sqlfiddle.com/#!6/03c2c/38