T-SQL Поиск в строке для конкретных слов - PullRequest
2 голосов
/ 02 января 2012

Коротко к точке:

«Я использую SQL Server Manager 2008 R2. У меня есть таблица со столбцами« имя продукта »и« размер продукта ». Размер продукта записывается в его имени следующим образом:

Ellas Kitchen Яблочно-имбирное детское печенье 120г

Ellas Kitchen Apple, булочки с изюмом и корицей Bakey 4 х 12 г

Elastoplast Spray Plaster 32,5 мл

Ellas Kitchen Стадия 1 Баттернат Сквош Каждый

размер этого продукта должен быть:

120g

4 х 12 г

32.5ml

N / A

(некоторые продукты могут не иметь размера в названии и должны быть установлены на "N / A")

Я хочу написать оператор T-SQL, который обновляет размер продукта, получая его из названия продукта.

Я сделал это в javascript, но чтобы все сделать правильно, я должен написать SQL-выражение, и это моя проблема. Мне было очень трудно работать с «регулярными выражениями» в T-SQL.

Я видел пример того, как получить только число из строки, но не знаю, как это сделать с помощью sql.

Declare @ProductName     varchar(100)
Select     @ProductName=    'dsadadsad15234Nudsadadmbers'

Select     @ProductName=    SubString(@ProductName,PATINDEX('%   [0-9]%',@ProductName),Len(@ProductName))
Select     @ProductName=    SubString(@ProductName,0,PATINDEX('%[^0-9]%',@ProductName))

Select     @ProductName

Буду признателен за любой пример или идею. Заранее спасибо.

EDIT:

Спасибо за ваш ответ, xQbert.

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

(Inumber + " x " + Dnumber + word) * + (_) * + (Dnumber + word) * - * означает 0 или более

где слово может быть - г, кг, мл, кл, пачка где Inumber - целое число где Днумбер двойной где _ это пробел

Например:

12 х 100 г 100мл 2 х кг

А цена (если есть) всегда в конце имени:

Название продукта + приз продукта

Например:

Органикс Органический Нут и Красный Перец Лазанья 190г Органикс Ризотто из Овощей и Свинины 250г Organix Рисовые торты яблоко 50г Органикс сухарики 7м + 6 шт Organix Пикантные бисквиты с сыром и луком каждый Печенье Organix со вкусом томатов и базилика Organix Стадия 1 Сквош и Курица 2 х 120 г

1 Ответ

1 голос
/ 02 января 2012

PATINDEX не является REGX, и у вас ограниченная логическая обработка в TSQL по сравнению с .NET. Вы оценили интеграцию CLR?

  http://msdn.microsoft.com/en-us/library/ms131089(SQL.100).aspx

Это с 2005 года, но и пример REGX в SQL через интеграцию CLR.

  http://msdn.microsoft.com/en-us/library/ms345136(v=SQL.90).aspx
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...