2010-11-05 2 views
6

Что такое эквивалент SQL Server выражения MySQL ниже?MySQL REGEXP to SQL Server

... WHERE somefield REGEXP '^[[:blank:]]*ASD[[:blank:]]*$|^[[:blank:]]*ASD[[:blank:]]*[[.vertical-line.]]|[[.vertical-line.]][[:blank:]]*ASD[[:blank:]]*$|[[.vertical-line.]][[:blank:]]*ASD[[:blank:]]*[[.vertical-line.]]' 
+0

Возможный дубликат [Регулярные выражения на серверах SQL Server?] (Http://stackoverflow.com/questions/267921/regular-expressions-in-sql-server-servers) –

+1

Я не ищу регулярные выражения в MSSQL я просто хочу любое эквивалентное выражение. – akosch

+0

Отметьте это сообщение: http://stackoverflow.com/questions/267921/regular-expressions-in-sql-server-servers Надеюсь, это поможет. – Hal

ответ

3

К сожалению, регулярное выражение поддержки в MSSQL ужасна, ближайший оператор «как», который скучает по функциональности регулярных выражений, отданной в миле. Вам придется взглянуть на разбиение регулярного выражения на несколько похожих утверждений и, вероятно, сделать некоторые грязные манипуляции строк, чтобы подражать тому, что вы пытаетесь достичь.

Например, если мы могли бы реплицировать [[: blank:]] с помощью [] (прочитайте [Space Tab]), мы не можем применить нуль или более из них, поэтому вместо этого мы должны вывести их из выражения, но это соответствовало бы «ASD», поэтому нам нужно проверить наличие ASD в неизмененной строке.

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

replace(replace(somefield,' ',''),' ','') in ('ASD','|ASD','|ASD|','ASD|') 
and 
somefield like '%ASD%' 

Опять же в моих операторах заметок одно пространство, другое - вкладка.