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

时间:2016-06-09 14:53:43

标签: sql sql-server

我在表external ref

中有一个名为transaction的列

使用一行作为示例

ITS trans code: 1188716 ITS batch: 78606 15/16

  • 1188716是反编号
  • 78606是批次ID
  • 15/16是日期

我只对trans和批次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服务器中实现吗?

2 个答案:

答案 0 :(得分:1)

这有点像黑客攻击,只有在您收到该格式的数据时才会有效

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

答案 1 :(得分:1)

我们遇到了同样的问题并使用主数据服务功能修复了它。我们确实需要在SqlServer上使用RegExp,最后得到一个像这样的函数:

<input id="Button1" onclick="showInfo()" type="button" value="Show Info." />

function showInfo()
{
    if (document.getElementById("Terminats"))
    {

    }
    else if (document.getElementById("HDTanel"))
    {

    }
}

点击此链接获取更多信息:https://dyball.wordpress.com/2011/11/01/sql-2008-r2-regular-expressions/