0

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

编辑-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 结束

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

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

以下没有奏效。

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

4 回答 4

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;

这假设您的数字在第一个 ] 之后。如果没有,可以使用更多IIFINSTRMID函数对其进行修改以匹配您的模式。这将是丑陋的,但它可以工作。

于 2013-06-12T21:47:15.183 回答
0
Select Mid([MyColumn],InStr([MyColumn],"]")+1,2) AS MyDigits
 FROM yourTable WHERE [MyColumn] LIKE "*]##[ [ ]*"

如果此答案符合您的需要,请授予支票。这就是 StackOverflow 的工作原理。

于 2013-06-13T14:08:47.170 回答
0

Yo dawg 我听说你喜欢括号,所以我把括号放在你的括号里,这样你就可以避开你的括号

  Select * FROM yourTable WHERE MAtch LIKE "*]##[ [ ]*"
于 2013-06-12T19:10:50.727 回答
-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

这是SQL fiddle的链接。

像这样的东西应该在 MS Access 中工作:

SELECT MyData AS Expr1
FROM TestPatIndex
where MyData like '*][0-9][0-9][[]*'
于 2013-06-12T19:00:35.830 回答