0

我在获取字符之间的正确文本时遇到问题。我目前正在尝试使用 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))
4

2 回答 2

3

我同意乔尔的评论。这看起来确实违反了第一个范式,但是要找到第二个实例,\您可以将第一个实例的位置作为第三个参数传递给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 '%\%\%'
于 2013-06-25T20:14:10.693 回答
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
于 2013-06-25T20:24:13.380 回答