2012-01-19 2 views
2

я работаю с Microsoft SQL Server 2008.SQL запросов - шаблон регулярного выражения для всех алфавитов

Я хочу, чтобы выполнить проверку всех алфавитов от А до Я, специальные символы, такие как: «:» и «-» для значения в одном столбце моей таблицы.

Я могу разработать «:» и «-». Как мне рассчитать значения между А-Я?

Я пробовал что-то вроде этого, но он не выполняет замену для меня.

INSERT INTO Employee (Name, PhoneNo, Sal) VALUES ('Joe Wang', '666 2323', 222222222); 

INSERT INTO Employee (Name, PhoneNo, Sal) VALUES ('John Doe','666 2323', '2G23:22-2'); 

UPDATE dbo.Employee 

SET Sal = REPLACE(REPLACE(Sal,'-',''), ':', '') 

WHERE Sal LIKE '%:%' OR Sal LIKE '%-%' OR Sal LIKE '%[A-Z]%'; 

Я получаю значения 'SAL' как: 222222222 и 2G23222

алфавиты не заменяются.

Я проверил онлайн для шаблона регулярных выражений и получил [A-Z] для всех алфавитов от A до Z. Я где-то ошибаюсь? Он не работает, если я также заменю [0-9].

Пожалуйста, помогите. Спасибо.

ответ

0

Это ошибка, потому что ваш оператор REPLACE не пытается заменить буквы, и вы не можете использовать совпадение шаблонов в REPLACE.

Вы должны попробовать другой подход и вместо этого попытаться найти любой символ, который не соответствует допустимым символам (Числа?), А затем заменить этот символ.

Here's a blog post that contains a UDF that does just this:

CREATE FUNCTION dbo.UFNG_ONLY_DIGITS (@StrVal AS VARCHAR(max)) 
RETURNS VARCHAR(max) 
AS 
BEGIN 
     WHILE PATINDEX('%[^0-9]%', @StrVal) > 0 
      SET @StrVal = REPLACE(@StrVal, 
       SUBSTRING(@StrVal,PATINDEX('%[^0-9]%', @StrVal),1),'') 
     RETURN @StrVal 
END 

Вы могли бы написать заявление обновления, как:

UPDATE dbo.Employee 
SET Sal = dbo.UFNG_ONLY_DIGITS (Sal) 
WHERE PATINDEX('%[^0-9]%', Sal) > 0 

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

0

делают использование REGEXP и [:alpha] в запросе что-то вроде

UPDATE dbo.Employee SET Sal = REPLACE(REPLACE(Sal,'-',''), ':', '')  
      WHERE Sal LIKE '%:%' OR Sal LIKE '%-%' OR Sal REGEXP '[:alpha]'; 

DOCUMENTATION , надеюсь, что это поможет вам

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