2009-09-23 1 views
5

У меня есть поле, которое содержит строки, такие как «Blah-OVER», «Blah-OveR» и т. Д., И вы хотите выбрать их без «over». Это только ловит первый случай (так сказать), а не других:Нечувствительность к регистру REPLACE() в SQL Server 2000

SELECT field as "before", REPLACE(field, 'OVER', '') as "after" 

Как только получить их все, чтобы сказать «Blah-» (сохранение случай, что осталось), не пытаясь охватить каждый случай сочетание с другой вложенной функцией REPLACE?

+0

Спасибо, Ремус, я искал правильный тег, но не пробовал эту комбинацию. – Kev

ответ

8

Используйте регистрозависимости сверки:

SELECT field as "before", REPLACE(field COLLATE SQL_Latin1_General_Cp1_CI_AI 
, 'OVER', '') as "after" 

См COLLATE для списка имен параметров сортировки, так что вы выбираете один для ваших наших правил данных.

Update

Хорошо, так что я пропустил ваш фактический запрос (изменить регистр ввода, а не найти без учета регистра). Правильное решение ... не изменять ввод, а использовать адекватную сортировку для ваших данных. Если данные должны отображаться в определенном формате, используйте параметры отображения в клиенте, например. CSS text-transform:uppercase, а не на сервере SELECT.

Нет встроенной функции SQL, чтобы сделать это преобразование на месте, но тривиально построить CLR function, который использует RegEx. (На SQL 2005, а не на SQL 2000 ... doh, мне нужно больше coffe).

+0

Этот синтаксис для меня новый! Благодаря! – Kev

0

Я не знаком с SQL Server, но, возможно, он позволяет использовать регулярные выражения. Обычно они предлагают нечувствительный к регистру режим (устанавливается через i-флаг).

В противном случае вы могли бы заглавным перед вызовом замены, например.

SELECT field as "before", REPLACE(UPPER(field), 'OVER', '') as "after" 
+0

Он производит «BLAH-». Поэтому он меняет входную строку не только путем замены «OVER». –

+0

Один сайт, с которым я столкнулся, предполагал, что вам нужна какая-то пользовательская DLL, используемая для использования регулярных выражений в 2000 году. Кроме того, это возвращает все «blah's as capitalized» - извините, я должен был указать, что в вопросе отредактирует. – Kev

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