如何匹配]
和[
(不是[
和]
)之间的数字?
修改-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 "*\]##\[*"
答案 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][[]*'