Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
sql server select语句中的正则表达式_Sql_Sql Server - Fatal编程技术网

sql server select语句中的正则表达式

sql server select语句中的正则表达式,sql,sql-server,Sql,Sql Server,我在表transaction中有一列名为external ref 以一行为例 其交易代码:1188716其批次:7860615/16 1188716是trans编号 78606是批次id 15/16是日期 我只对trans和batch id感兴趣 我最初是这样做的 SELECT SUBSTRING(ts.ext_ref, 17, 7) AS transaction_id, SUBSTRING(ts.ext_ref, 34, 7) batch_id FROM transac

我在表
transaction
中有一列名为
external ref

以一行为例

其交易代码:1188716其批次:7860615/16

  • 1188716是trans编号
  • 78606是批次id
  • 15/16是日期
我只对trans和batch id感兴趣

我最初是这样做的

SELECT 
   SUBSTRING(ts.ext_ref, 17, 7) AS transaction_id,
   SUBSTRING(ts.ext_ref, 34, 7) batch_id
   FROM transactions ts
它停止工作,因为1188716和78606都不是固定长度 我可以获得事务id 123批处理id 456 或事务id 12345566批处理id 45678990

我想实现如下逻辑 在第3和第4个空格之间对任意连续数字进行配对 在第6和第7个空格上也有同样的逻辑


有可能在SQL server中实现这一点吗?

这有点像黑客,只有当您接收到该格式的数据时,这才有效

DECLARE @text VARCHAR(MAX) = 'ITS trans code: 1188716 ITS batch: 78606 15/16'

SELECT LEFT(LTRIM(RTRIM(REPLACE(@text, LEFT(@Text, CHARINDEX(':', @text)),   ''))), CHARINDEX(' ',LTRIM(RTRIM(REPLACE(@text, LEFT(@text, CHARINDEX(':',  @text)), ''))))) As TransNumber, 
REVERSE(LEFT(REPLACE(REVERSE(@text),  LEFT(REVERSE(@text), CHARINDEX(' ',REVERSE(@text))), ''),CHARINDEX(' ',REPLACE(REVERSE(@text), LEFT(REVERSE(@text), CHARINDEX(' ', REVERSE(@text))), '')))) AS BatchID

我们也面临同样的问题,并使用Master Data Services功能修复了它。我们确实需要SqlServer上的RegExp,最终得到了如下函数:

CREATE FUNCTION [RegexExtract](@input [nvarchar](4000), @pattern [nvarchar](4000), @group [nvarchar](4000), @mask [tinyint])
RETURNS [nvarchar](4000) WITH EXECUTE AS CALLER, RETURNS NULL ON NULL INPUT
AS 
EXTERNAL NAME [Microsoft.MasterDataServices.DataQuality].[Microsoft.MasterDataServices.DataQuality.SqlClr].[RegexExtract]
GO

按照此链接获取更多信息:

使用CHARINDEX()和SUBSTRING()可能重复事实上,使用CHARINDEX()SUBSTRING()REVERSE()LTRIM()REPLACE()函数是解决此问题的关键。抱歉。你要做的就是把它倒回去。我做了更新,如果可以的话我会投票。。这是一个很好的解决方案。但就我而言,这是一个一次性的查询。姆维瑟的回答更适合我