SQL之间的文本获取

时间:2013-06-25 20:09:41

标签: sql sql-server-2008

我遇到了在角色之间获取正确文字的问题。我目前正在尝试使用SUBSTRING和CHARINDEX。问题是数据包含相同的标识符。我希望文本介于第一个'\'和第二个'\'之间,删除所有其他文本。没有文本字段具有固定数量的字符。

感谢您的帮助,非常感谢。

Example
1. Location\Georgia\Atlanta
2. Country\USA\States\Minnesota

Final Result
1. Georgia
2. USA

我当前的尝试

SUBSTRING(Source,CHARINDEX('\',Source),CHARINDEX('\',Source) - CHARINDEX('\',Source))

2 个答案:

答案 0 :(得分:3)

我同意乔尔的评论。这看起来违反了first normal form,但要查找\的第二个实例,您可以将第一个参数的位置作为第三个参数传递给CHARINDEX

WITH T(Source) AS
(
SELECT 'Location\Georgia\Atlanta' UNION ALL
SELECT 'Country\USA\States\Minnesota'
)
SELECT *,
       SUBSTRING(Source, F,CHARINDEX('\',Source, F) - F)
FROM T 
CROSS APPLY (SELECT 1 + CHARINDEX('\',Source)) CA(F)
WHERE Source LIKE '%\%\%'

答案 1 :(得分:1)

马丁的答案很光滑,这种方法很有效,但大多只是说明他的光滑程度如何:

WITH T(Source) AS
(
SELECT 'Location\Georgia\Atlanta' UNION
SELECT 'Country\USA\States\Minnesota'
)
SELECT *, SUBSTRING(Source,CHARINDEX('\',Source)+1,CHARINDEX('\',Source,CHARINDEX('\',Source)+1)-CHARINDEX('\',Source)-1)
FROM T