我遇到了在角色之间获取正确文字的问题。我目前正在尝试使用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))
答案 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