2010-01-20 5 views
1

Я пытаюсь создать страницу asp.net с помощью C#, которая будет запрашивать столбец в базе данных Oracle, которая содержит 20 000 строк.C# search oracle table column for regex pattern

Я хочу, чтобы отобразить все строки, которые соответствуют этому шаблону регулярного выражения «[\ г \ п] $». (Должно быть только около 5 строк, которые соответствуют этому шаблону)

Версия Oracle мы используем не делает regex, поэтому мне нужно найти способ сделать это в C#, но я не уверен, как это сделать.

ответ

1

Сначала начните с определения того, что делает регулярное выражение.

Давайте разберем этот вниз:

[\r\n]$

Скобки [] дают вам character class и говорит «соответствуют одному из этих символов.» Таким образом, [\r\n] говорит совпадение \r (возврат каретки) или \n (линия break). $ - это номер anchor и говорит «совпадение в конце строки». Таким образом, регулярное выражение говорит, что «соответствует возврату каретки или прерыванию строки в конце строки».

Теперь вы можете перевести это в SQL? Для этого вам нужно что-то вроде

SELECT * FROM TABLE 
WHERE 
    SOMECOLUMN LIKE '%'||CHR(13)||CHR(10) OR 
    SOMECOLUMN LIKE '%'||CHR(13) 

(К сожалению, мой Oracle слаб, но это близко первое приближение.)

Если нет, то вы можете получить данные из вашей таблицы (SELECT * FROM TABLE) и запустить это регулярное выражение локально в .NET? Двадцать тысяч строк не так много, чтобы просто вытащить все это в память и запустить ее локально.

+0

Теперь вы можете перевести это в SQL? - Я так не думаю, так как версия Oracle у нас не поддерживается regex. «Если нет, можете ли вы получить данные из своей базы данных и запустить это регулярное выражение локально?» - вот что я пытаюсь выяснить, как это сделать. – CookieMonster

+0

Вам не нужно регулярное выражение, чтобы найти строки, соответствующие этому регулярному выражению. – jason

+0

спасибо, что отлично работали – CookieMonster

0

Если вы хотите сделать это с помощью регулярного выражения в .net, вам в основном придется загружать все данные в память и выполнять поиск по регулярному выражению. Это может привести к очень низкой производительности. Я думаю, вам следует рассмотреть возможность обычного сравнения строк в базе данных, если это вообще возможно.

+0

Как вы проверяете возврат каретки в Oracle SQL в базе данных, которая не поддерживает регулярное выражение? – CookieMonster

+0

Ну, в основном как @Jason объяснил выше. –