2014-07-11 139 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