我正在尝试编写一个查询,该查询将从较长的字符串中提取部分信息,但字符串并不总是一致的,因此我需要识别某些部分并基于此进行提取。
该字符串是属性包上的法律描述信息,其结构如下:"Lot D, Plan VIP12345, Section 70, Suchandsuch District"。我正在尝试将"VIP12345"部件作为一个单独的字段。
最初,我考虑将这个字段导出为CSV表,然后以这种方式将信息分离到唯一的部分,但这是一个通过替换整个数据集定期更新的数据集,所以每次更新该字段时,我都必须导出该表,使该字段成为CSV表,将其重新导入到单独的字段中,然后将其导出到我的GIS可以加入的内容中。
我希望我的地理信息系统链接到原始表,并使用一个SQL查询来确定Plan#在哪里( "VIP12345“部分)。然而,Plan#并不总是从VIP开始,有时没有字母开始,有时是VIS,有时是EPP。Plan#也不总是相同的数字,有时是4,有时是5,有时是6,所以我不能只计算从某个点提取的字符#。
因此,我想我需要一个用普通语言可以做到的SQL查询:在字段中,[FIXLGL]查找字符串'Plan ',然后提取后面的所有字符,直到您看到‘,’,
我很难弄清楚要用什么SQL杂技来完成这个任务。我可以识别有plan# ([FIXLGL] LIKE '%Plan %')的记录,但是如何告诉查询重要的部分是什么呢?
发布于 2017-12-21 19:12:09
如果使用的是Server,则可以使用此方法。
如果你不是,我会删除我的答案。
DECLARE @s NVARCHAR(100) = N'Lot D, Plan VIP12345, Section 70, Suchandsuch District';
SELECT @s,
SUBSTRING(@s AS string,
CHARINDEX('VIP', @s),
CHARINDEX(',', @s, CHARINDEX('VIP', @s))
- CHARINDEX('VIP', @s)
) AS sub这是怎么回事?
我们可以使用子串和字符索引的结果来获得我们感兴趣的字符串的部分。
与Patindex相比,Charindex是一个更好的选择,因为它接受第三个参数。第三个参数告诉charindex字符串中何时开始搜索。
SUBSTRING(@s, --The string
CHARINDEX('VIP', @s), --Charindex of VIP
CHARINDEX(',', @s, CHARINDEX('VIP', @s)) --Charindex of the first comma _after_ VIP
- CHARINDEX('VIP', @s) --Subtract the position of VIP
)这给了我们:
string sub
Lot D, Plan VIP12345, Section 70, Suchandsuch District VIP12345希望这能有所帮助!
发布于 2017-12-21 19:28:55
如果使用的是Server 2016+,则可以使用新的string_split函数,如下所示
-- only applicable to SQL Server 2016+
declare @s varchar(2000)= 'Lot D, Plan VIP12345, Section 70, Suchandsuch District'
select [VIP]=substring([value], charindex('VIP', [value]), 120), [value]
from string_split(@s, ',')
where [value] like '%VIP%'
https://dba.stackexchange.com/questions/193762
复制相似问题