Есть ли библиотека регулярных выражений, написанная на T-SQL (без CLR, без расширенного SP
, чистого T-SQL) для SQL Server, и которая должна работать с общим хостингом?
Редактировать:
- Спасибо, я знаю о том
PATINDEX
,LIKE
,xp_
sps
и решения CLR - Я также знаю, что это не лучшее место для регулярного выражения, вопрос теоретический :)
- Допускается также ограниченная функциональность
sql-server
regex
tsql
xnagyg
источник
источник
SAFE
и не отмеченных как либоEXTERNAL_ACCESS
илиUNSAFE
(поскольку я понимаю, почему эти два последних набора разрешений будут проблематичными для среды общего хостинга). База данных Microsoft Azure SQL V12 (т.е. новая версия на конец 2014 года), которая является общей средой, позволяет использовать сборки, помеченные какSAFE
(и загружаемые через,FROM 0x...
а не из DLL, поскольку вы не можете загрузить DLL). НоSAFE
это все, что нужно для регулярных выражений и МНОГО других очень полезных функций.Ответы:
Как насчет функции PATINDEX ?
Сопоставление с образцом в TSQL - это не полная библиотека регулярных выражений, но она дает вам основы.
(Из электронной книги)
источник
LIKE
поддерживал все, чтоPATINDEX
есть. Не знаю до этого ...%
соответствует 0 или более символам (независимо),[...]
соответствует только одному, и между ними ничего нет.Если кто-то заинтересован в использовании регулярного выражения с CLR, вот решение. Функция ниже (C # .net 4.5) возвращает 1, если шаблон совпадает, и 0, если шаблон не совпадает. Я использую его для пометки строк в подзапросах. Атрибут SQLfunction сообщает серверу sql, что этот метод является фактической UDF, которую будет использовать сервер SQL. Сохраните файл как dll в том месте, где вы можете получить к нему доступ из студии управления.
В студии управления импортируйте файл dll через программируемость - сборки - новая сборка
Затем запустите этот запрос:
Тогда у вас должен быть полный доступ к функции через базу данных, в которой вы сохранили сборку.
Затем используйте в таких запросах:
источник
Существует некоторое базовое сопоставление с образцом, доступное с использованием LIKE, где% соответствует любому количеству и комбинации символов, _ соответствует любому одному символу, а [abc] может соответствовать a, b или c ... Дополнительная информация доступна на сайте MSDN ,
источник
Если вы используете SQL Server 2016 или более поздней версии, вы можете использовать
sp_execute_external_script
вместе с R. В нем есть функции для поиска по регулярным выражениям, такие какgrep
иgrepl
.Вот пример адресов электронной почты. Я опрашиваю некоторых «людей» через ядро базы данных SQL Server, передаю данные об этих людях в R, позволяю R решать, какие люди имеют недопустимые адреса электронной почты, и заставляю R передавать это подмножество людей в SQL Server. «Люди» взяты из
[Application].[People]
таблицы в[WideWorldImporters]
образце базы данных. Они передаются механизму R как фрейм данных с именемInputDataSet
. R использует функцию grepl с оператором «not» (восклицательный знак!), Чтобы найти людей, адреса электронной почты которых не соответствуют шаблону поиска строки RegEx.Обратите внимание, что соответствующие функции должны быть установлены на узле SQL Server. Для SQL Server 2016 это называется «Службы SQL Server R». Для SQL Server 2017 он был переименован в «Службы машинного обучения SQL Server».
Заключение В реализации Microsoft SQL (T-SQL) нет встроенной поддержки RegEx. Это предлагаемое решение может быть не более желательным для OP, чем использование хранимой процедуры CLR. Но он предлагает дополнительный способ подойти к проблеме.
источник
На тот случай, если кто-то еще изучает этот вопрос, http://www.sqlsharp.com/ - это бесплатный и простой способ добавить функции CLR регулярных выражений в вашу базу данных.
источник
Вы можете использовать функции регулярных выражений VBScript с помощью OLE Automation. Это намного лучше, чем накладные расходы на создание и обслуживание сборки. Пожалуйста, не забудьте просмотреть раздел комментариев, чтобы получить лучшую модифицированную версию основной.
http://blogs.msdn.com/b/khen1234/archive/2005/05/11/416392.aspx
Если вы получили
SQL Server blocked access to procedure 'sys.sp_OACreate'...
ошибку, используйтеsp_reconfigure
для включенияOle Automation Procedures
. (Да, к сожалению, это изменение уровня сервера!)Более подробная информация о
Test
методе доступна здесь.Удачного кодирования
источник