2015-08-31 3 views
1

У меня есть таблица вида:TSQL - Grab действительные адреса

Url 
============== 
www.google.com 
http://www.yahoo.com/ 
www.192.168.1.1.com 
192.168.1.5 
www.192.168.5.149/service.ir 
test.sitename.com 

Так что мой вопрос seperats на две секции:

  1. Получение всех URL-адресов на основе шаблона ((http|ftp|https):\/\/[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&:/~\+#]*[\w\-\@?^=%&/~\+#])?).
  2. Форматирование URL-адреса, которые не являются действительными (на основе модели)

Так что я придумал запрос, как это для первой части:

select Url FROM UserWebsites 
    WHERE Url like '%(http|ftp|https):\/\/[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&:/~\+#]*[\w\-\@?^=%&/~\+#])?%' 

Но я понятия не имею, Как формат URL.

Есть ли более элегантный способ сделать это?

+3

Есть ли возможность очистить данные перед тем, как принести их в SQL Server? –

+0

@TimBiegeleisen К сожалению, данные были сохранены в базе данных. –

+1

В SQL Server для проверки регулярного выражения вам необходимо использовать функцию CLR. Посмотрите на [this] (http://stackoverflow.com/q/5212665/4519059);). –

ответ

0

T-SQL не является хорошим инструментом для синтаксического анализа строк - вам гораздо лучше написать функцию CLR и выполнить эту работу там. Есть много вещей, которые вы можете сделать с RegEx в простой функции - и, скорее всего, это будет более эффективный код (потому что писать что-либо похожее на функции RegEx со строковыми операторами T-SQL будет долгим и вовлеченным).

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