2013-01-31 50 views
3

如何从以下列中的第六个字段获取值?我试图让333场:从包含多个分隔值的列中提取一个值

ORGPATHTXT 
2123/2322/12323/111/222/333/3822 

我相信我有使用select substring,但我不确定如何。如果你正在使用MySQL来格式化查询

+0

哪个RDBMS您使用的动态管理功能选项? –

+0

对不起,我使用SQL –

+0

这是否意味着Microsoft的SQL Server?如果是这样,哪个版本? –

回答

0

,那么你可以使用:

select substring_index(orgpathtxt, '/', 6) 

让我只是说在大多数其他数据库中它不太方便。

2

假设SQL服务器

我能想到的最简单的方法是创建一个分裂基于“/”拆分功能,您提取第六项类似下面

declare @text varchar(50) = '2123/2322/12323/111/222/333/3822' 

select txt_value from fn_ParseText2Table(@text, '/') t where t.Position = 6 

我使用了this url中的函数。 See it worked at SQLFiddle

2

试试这个 - 一个字符串variable或包裹成一个function与选择查询使用(Sql-Demo

Declare @s varchar(50)='2123/2322/12323/111/222/333/3822' 

Select @s = right(@s,len(@s)- case charindex('/',@s,1) when 0 then len(@s) 
           else charindex('/',@s,1) end) 
From (values (1),(2),(3),(4),(5)) As t(num) 

Select case when charindex('/',@s,1)>0 then left(@s,charindex('/',@s,1)-1) 
      else @s end 

--Results 
333 
+0

这怎么可能被放入一个函数在列上工作? –

+0

@TimLehner:只适用于字符串变量。否则,选择列表必须放入游标/循环,并使用此方法将结果填入临时表中。 – Kaf

1

我想提供一个使用CROSS APPLY分裂任何分隔字符串的解决方案在MSSQL和ROW_NUMBER()返回第六个元素。这里假设你有一个ORGPATHTXT表作为一个字段(它可以很容易地转换,而不表的工作,虽然):

SELECT ORGPATHTXT 
FROM (
    SELECT 
    Split.a.value('.', 'VARCHAR(100)') AS ORGPATHTXT, 
    ROW_NUMBER() OVER (PARTITION BY ID ORDER BY (SELECT 1)) RN 
    FROM 
    (SELECT ID, CAST ('<M>' + REPLACE(ORGPATHTXT, '/', '</M><M>') + '</M>' AS XML) AS String 
    FROM MyTable 
) AS A 
    CROSS APPLY String.nodes ('/M') AS Split(a) 
) t 
WHERE t.RN = 6; 

下面是一些示例Fiddle与它一起去。

祝你好运。

+0

当我尝试使用这个时,我收到一条消息,说非法名字字符 –

+0

这是一个XML解析器错误,我相信 - 你确定数据总是以上述格式?你有没有试过我的SQL小提琴? – sgeddes

+0

数据可以是字母或数字,长度可变 –

1

对于SQL,您可以使用

declare @string varchar(65) = '2123/2322/12323/111/222/333/3822' 

select substring(string,25,27) from table_name 
+1

这个字段中的值是可变的,所以我怀疑这会工作 –

+0

为什么'sql'与SQL Server关联? – Kermit

0

您也可以使用sys.dm_fts_parser

DECLARE @s nvarchar(50) = '2123/2322/12323/111/222/333/3822' 

SELECT display_term 
FROM sys.dm_fts_parser('"'+ @s + '"', 1033, NULL, 0) 
WHERE display_term NOT LIKE 'nn%' AND occurrence = 6 
相关问题