首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >语法以查找字符串中的文本,然后拔出以下文本直到识别逗号为止?

问语法以查找字符串中的文本,然后拔出以下文本直到识别逗号为止?
EN

Database Administration用户
提问于 2017-12-21 18:56:58
回答 2查看 511关注 0票数 1

我正在尝试编写一个查询,该查询将从较长的字符串中提取部分信息,但字符串并不总是一致的,因此我需要识别某些部分并基于此进行提取。

该字符串是属性包上的法律描述信息,其结构如下:"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 %')的记录,但是如何告诉查询重要的部分是什么呢?

EN

回答 2

Database Administration用户

发布于 2017-12-21 19:12:09

如果使用的是Server,则可以使用此方法。

如果你不是,我会删除我的答案。

代码语言:javascript
复制
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字符串中何时开始搜索。

代码语言:javascript
复制
        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
                 )

这给了我们:

代码语言:javascript
复制
string                                                  sub
Lot D, Plan VIP12345, Section 70, Suchandsuch District  VIP12345

希望这能有所帮助!

票数 2
EN

Database Administration用户

发布于 2017-12-21 19:28:55

如果使用的是Server 2016+,则可以使用新的string_split函数,如下所示

代码语言:javascript
复制
-- 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%'
票数 1
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/193762

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档