sql - TSQL - 提取两个单词之间的文本
问题描述
我确实在网站上找到了一些信息,但我无法使其正常工作。我有一个文本字段 [User],其中包含 USER: John.Smith SessionId: {There is a space after User: and one after the name}
我尝试的所有内容都将删除第一部分或最后一个部分,没有一个会同时删除。或者会给我这个消息 Invalid length parameter passing to the LEFT or SUBSTRING function
我想从该字段中提取名称 John.Smith。如果可能的话,我不想声明任何表。
谢谢
解决方案
如果对 TVF 开放
例子
Select A.ID
,B.*
From YourTable A
Cross Apply [dbo].[tvf-Str-Extract](SomeCol,'USER:','SessionId:') B
退货
ID RetSeq RetVal
1 1 John.Smith
感兴趣的功能
CREATE FUNCTION [dbo].[tvf-Str-Extract] (@String varchar(max),@Delim1 varchar(100),@Delim2 varchar(100))
Returns Table
As
Return (
Select RetSeq = row_number() over (order by RetSeq)
,RetVal = left(RetVal,charindex(@Delim2,RetVal)-1)
From (
Select RetSeq = row_number() over (order by 1/0)
,RetVal = ltrim(rtrim(B.i.value('(./text())[1]', 'varchar(max)')))
From ( values (convert(xml,'<x>' + replace((Select replace(@String,@Delim1,'§§Split§§') as [*] For XML Path('')),'§§Split§§','</x><x>')+'</x>').query('.'))) as A(XMLData)
Cross Apply XMLData.nodes('x') AS B(i)
) C1
Where charindex(@Delim2,RetVal)>1
)
/*
Declare @String varchar(max) = 'Dear [[FirstName]] [[LastName]], ...'
Select * From [dbo].[tvf-Str-Extract] (@String,'[[',']]')
*/
推荐阅读
- git - 在命令行上触发 gitlab ci/cd 作业
- azure - Azure 通知中心引发套接字异常
- angular - API 调用执行两次
- arrays - 如何使用来自另一个文件的数据绘制图表
- node.js - 如何在子文件夹上运行本地节点服务器?
- reactjs - React 的承诺:如何将数组转换为 json
- python - Matplotlib:在 3D 表面上绘制 3D 曲线
- laravel - 如何发送多封电子邮件以获取视图中的用户数据 - Laravel
- .net - 在 .NET 应用程序和 UWP 应用程序之间传递消息
- json - 是否可以在没有模板消息的情况下使用 NLog 的结构化日志记录?