SQL для фильтрации по нескольким критериям, включая включение в список строк - PullRequest
0 голосов
/ 29 января 2011

так что у меня есть таблица, скажем, назовите ее «tbl.items», и в «tbl.items» есть столбец «title». Я хочу просмотреть каждую строку и для каждого «title» в «tbl.items» я хочу сделать следующее: столбец имеет тип данных nvarchar (max) и содержит строку ...

  1. отфильтровать строку, чтобы удалить слова типа in, out, где и т.д. (стоп-слова)
  2. сравнивает оставшуюся часть строки с предварительно определенным списком и, если есть совпадение, выполняет какое-либо действие, которое включает вставку данных в другие таблицы.

проблема в том, что я не знаю, когда речь идет о написании сценариев T-sql, помогите, пожалуйста, помогите мне, как мне этого добиться? можно ли этого добиться написав скрипт sql ?? или мне нужно разработать консольное приложение на c # или другом языке ??

я использую mssql server 2008

заранее спасибо

1 Ответ

1 голос
/ 29 января 2011

Вы хотите несколько вещей. Сначала посмотрите синтаксис SQL Server для функций и напишите что-то вроде этого:

-- Warning! Code written off the top of my head,
-- don't expect this to work w/copy-n-paste
create function removeStrings(@input nvarchar(4000))
as begin
    -- We're being kind of simple-minded and using strings
    -- instead of regular expressions, so we are assuming a
    -- a space before and after each word.  This makes this work better:
    @input = ' ' + @input

    -- Big list of replaces
    @input = replace(' in ','',@input)
    @input = replace(' out ','',@input)
    --- more replaces...
end

Тогда вам нужен список совпадений в таблице, назовите его «предопределенный» с колонкой «matchString».

Затем вы можете получить соответствующие строки с помощью:

select p.matchString
  from items i
  join predefined p 
    on removeStrings(i.title) = p.matchString

Как только у вас будут работать эти отдельные части, я предлагаю новый вопрос о том, какой конкретный процесс вы можете выполнять с ними.

Предупреждение. Не зная, сколько у вас строк или как часто вам приходится это делать (каждый раз, когда пользователь что-то сохраняет? Один раз / день?), Это не будет быстрым, если вы понимаете, о чем я. Поэтому, когда у вас есть эти строительные блоки в руках, может возникнуть дополнительный вопрос о том, как и когда это сделать.

...