如何从以下列的第六个字段中获取值?我想要获得333领域:
ORGPATHTXT
2123/2322/12323/111/222/333/3822
我认为我必须使用select substring
,但我不确定如何格式化查询
答案 0 :(得分:2)
假设SQL Server
我能想到的最简单的方法是创建一个基于'/'分割的分割函数,然后像下面一样提取第六个项目
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
答案 1 :(得分: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
答案 2 :(得分:1)
我想提供一个解决方案,使用CROSS APPLY
拆分MSSQL中的任何分隔字符串,ROW_NUMBER()
返回第6个元素。这假设您有一个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。
祝你好运。答案 3 :(得分:1)
对于sql,您可以使用
declare @string varchar(65) = '2123/2322/12323/111/222/333/3822'
select substring(string,25,27) from table_name
答案 4 :(得分:0)
如果您使用的是MySQL,那么您可以使用:
select substring_index(orgpathtxt, '/', 6)
我只想说在大多数其他数据库中不太方便。
答案 5 :(得分: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