Насколько я понимаю, битовые поля являются чисто конструкциями компилятора
blockquote>И это часть проблемы. Если использование бит-полей было ограничено тем, что принадлежит компилятору, то как компилятор упаковывал биты или заказывал их, он почти никому не беспокоился.
Однако битовые поля, вероятно, используется гораздо чаще для моделирования конструкций, которые являются внешними по отношению к домену компилятора - аппаратным регистрам, протоколу «провод» для связи или макет формата файла. У этих вещей есть строгие требования о том, как биты должны быть выложены, а использование битовых полей для их моделирования означает, что вам приходится полагаться на определенные реализацией и, что еще хуже, неуказанное поведение того, как компилятор будет макетировать бит-поле .
Короче говоря, бит-поля не указаны достаточно хорошо, чтобы сделать их полезными для ситуаций, которые, по-видимому, наиболее часто используются.
Вам не нужно взаимодействовать с управляемым кодом, так как вы можете использовать LIKE :
CREATE TABLE #Sample(Field varchar(50), Result varchar(50))
GO
INSERT INTO #Sample (Field, Result) VALUES ('ABC123 ', 'Do not match')
INSERT INTO #Sample (Field, Result) VALUES ('ABC123.', 'Do not match')
INSERT INTO #Sample (Field, Result) VALUES ('ABC123&', 'Match')
SELECT * FROM #Sample WHERE Field LIKE '%[^a-z0-9 .]%'
GO
DROP TABLE #Sample
Когда ваше выражение заканчивается на +
, вы можете пойти с '%[^a-z0-9 .][^a-z0-9 .]%'
EDIT: сделать ясно: SQL Server не поддерживает регулярные выражения без управляемого кода. В зависимости от ситуации оператор LIKE
может быть опцией, но ему не хватает гибкости, которую предоставляют регулярные выражения.
Вы можете использовать функцию в SqlServer и передать ей значение, которое вы хотите оценить. Посмотрите на эту ссылку: http://msdn.microsoft.com/en-us/library/w2kae45k(v=vs.80).aspx
SELECT * from SOME_TABLE where NAME like '%[^A-Z]%'
Или какое-либо другое выражение вместо A-Z
Вам нужно будет создать CLR-процедуру, которая предоставляет функции регулярного выражения, как показано в этой статье .
Немного измененная версия ответа Хулио.
-- MS SQL using VBScript Regex
-- select dbo.RegexReplace('aa bb cc','($1) ($2) ($3)','([^\s]*)\s*([^\s]*)\s*([^\s]*)')
-- $$ dollar sign, $1 - $9 back references, $& whole match
CREATE FUNCTION [dbo].[RegexReplace]
( -- these match exactly the parameters of RegExp
@searchstring varchar(4000),
@replacestring varchar(4000),
@pattern varchar(4000)
)
RETURNS varchar(4000)
AS
BEGIN
declare @objRegexExp int,
@objErrorObj int,
@strErrorMessage varchar(255),
@res int,
@result varchar(4000)
if( @searchstring is null or len(ltrim(rtrim(@searchstring))) = 0) return null
set @result=''
exec @res=sp_OACreate 'VBScript.RegExp', @objRegexExp out
if( @res <> 0) return '..VBScript did not initialize'
exec @res=sp_OASetProperty @objRegexExp, 'Pattern', @pattern
if( @res <> 0) return '..Pattern property set failed'
exec @res=sp_OASetProperty @objRegexExp, 'IgnoreCase', 0
if( @res <> 0) return '..IgnoreCase option failed'
exec @res=sp_OAMethod @objRegexExp, 'Replace', @result OUT,
@searchstring, @replacestring
if( @res <> 0) return '..Bad search string'
exec @res=sp_OADestroy @objRegexExp
return @result
END
Вам нужно, чтобы процедуры автоматизации Ole были включены в SQL:
exec sp_configure 'show advanced options',1;
go
reconfigure;
go
sp_configure 'Ole Automation Procedures', 1;
go
reconfigure;
go
sp_configure 'show advanced options',0;
go
reconfigure;
go
+
как{1,2}
, когда он должен принимать его как{1, }
. Удивительно, но это сработало с ОП. – Rubens Farias 28 April 2015 в 18:43LIKE
не является регулярным выражением (это более ограниченный синтаксис соответствия шаблону), поэтому отсутствие поддержки регулярного выражения не означает, что это не сработает. – Charles Duffy 16 April 2016 в 23:28