2013-06-12 2 views
0

Как я могу сопоставить числа, которые находятся между ] и [ (не [ и ])?Как совместить числа, которые присутствуют между] и [?

EDIT-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

Я удалил свой ответ после того, как долгое время google ничего не показывал. Похоже, вам, возможно, потребуется использовать функцию InStr в модуле и проанализировать данные в таблице temp, а затем отфильтровать таблицу temp. –

+0

@ пользователь2174085 думаю мой работа. Я еще не тестировал его, но думаю, что так и должно быть. – Scotch

ответ

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; 

Это предполагает, что ваши цифры приходят после t он сначала]. Если нет, его можно изменить с помощью более IIF, INSTR, & MID функции, соответствующие вашему шаблону. Это было бы уродливо, но это может сработать.

+0

Btw, для решения VBA вам понадобится ссылка Microsoft VBScript Regular Expressions. –

-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][[]*' 
+0

Я думал, что будет прямое решение. В настоящее время я собираю данные из MsAccess и используя 'R' для фильтрации. Это работает очень хорошо. Я хотел посмотреть, есть ли какой-либо синтаксис MSAccess –

+0

Я обновил ответ для синтаксиса MS Access –

0

Yo Dawg Я слышал, что вы, как скобки, так что я положил скобки в своих скобках, так что вы можете избежать ваши скобки

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

, этот не работает, по крайней мере, для загруженных мной данных –

+0

Я попробовал это с теми же примерами данных, и это сработало для меня. Какую версию доступа вы используете. – Scotch

+0

Это не извлекает числа. Все, что он делает, это показать записи, соответствующие этому шаблону. –

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

Оплатить заявку, если ваш ответ соответствует вашим потребностям. Так работает StackOverflow.

+0

Я получаю следующее «MyDigits row-1) 43 row-2) 49 row-3) [w' –

+0

Nevermind ... Я просто перечитал его. Хорошо, дайте мне минуту ... –

+0

см. Мой вопрос edit-1 –

Смежные вопросы