如何匹配]和[?之间存在的数字?

时间:2013-06-12 18:05:01

标签: sql regex ms-access

如何匹配][(不是[])之间的数字?

修改-1

换句话说,我想提取我的数字在][之间的行。 我的桌子看起来像这样......

   ID1  id  mycolmn
    1   100 [ab-ee]43[ddhj]
    2   233 [aa-33]49[kl-00]
    3   344 [ss-23][wdsd]

我应该

43
49

EDIT-1结束

请参阅示例文件here。我在MyDatabase中有一个列,我想提取][之间有两个数字的行。

示例[ab-ee]43[ddhj][aa-33]49[kl-00]

以下不起作用。

SELECT * from myTable where [mycolmn] Like "*\]##\[*"

4 个答案:

答案 0 :(得分:3)

您可以使用VBA或SQL。

<强> VBA

Function GetCode(MyColumn As String) As String
    Dim RE As New RegExp
    Dim colMatches As MatchCollection
    With RE
        .Pattern = "\]\d\d\["
        .IgnoreCase = True
        .Global = False
        .Multiline = False
        Set colMatches = .Execute(MyColumn)
    End With
    If colMatches.Count > 0 Then
        GetCode = Replace(Replace(colMatches(0).Value, "[", ""), "]", "")
    Else
        GetCode = ""
    End If
End Function

你会这样称呼它:

SELECT GetCode([test]) AS MyDigits
FROM test;

如果您想要一个海峡SQL解决方案:

SELECT Mid([test],InStr([test],"]")+1,2) AS MyDigits
FROM test;

这假设您的号码在第一个之后。如果没有,可以使用更多 IIF INSTR ,&amp; MID 功能可以匹配您的模式。它会很难看,但它可以起作用。

答案 1 :(得分:0)

哟dawg我听说你喜欢括号,所以我把括号放在括号中,这样你就可以转义括号

  Select * FROM yourTable WHERE MAtch LIKE "*]##[ [ ]*"

答案 2 :(得分:0)

Select Mid([MyColumn],InStr([MyColumn],"]")+1,2) AS MyDigits
 FROM yourTable WHERE [MyColumn] LIKE "*]##[ [ ]*"

如果此答案符合您的要求,请奖励支票。这就是StackOverflow的工作原理。

答案 3 :(得分:-1)

您可以尝试PATINDEX:

create table TestPatIndex
(
    MyData varchar(100)
)

insert into TestPatIndex select '[ab-ee]43[ddhj]'
insert into TestPatIndex select '[ab-ee]XX[ddhj]'

select SUBSTRING(MyData, PATINDEX ('%][0-9][0-9][[]%', MyData ) + 1, 2)
from TestPatIndex
where isnumeric(SUBSTRING(MyData, PATINDEX ('%][0-9][0-9][[]%', MyData ) + 1, 2)) = 1

这是一个link到SQL小提琴。

这样的事情应该在MS Access中起作用:

SELECT MyData AS Expr1
FROM TestPatIndex
where MyData like '*][0-9][0-9][[]*'