Поиск слов в индексе SQL Server

helper можно вызывать с другим параметром value для одного и того же index. Таким образом, value должно быть удалено (вычтено из сохраненного max_dict). Один из способов сделать это - добавить value непосредственно перед возвращением, а не раньше:

money = [2, 1, 1, 2]

max_dict = {}
def helper(value, index):

    if index in max_dict:
        return value + max_dict[index]

    elif index >= len(money):

        return value

    else:
        option1 = money[index]
        new_index1 = index + 2

        option2 = 0
        new_index2 = index + 1

        max_dict[index] = max(helper(option1, new_index1), helper(option2, new_index2))

        return value + max_dict[index]


helper(0, 0)

Более подробное объяснение того, что происходит, дается в ответе @ ggorlen

.
6
задан Sam 20 October 2008 в 12:18
поделиться

6 ответов

SQL Server 2000 или выше.

SELECT *
  FROM dbo.TblBusinessNames
 WHERE BusinessName like '%[^A-z^0-9]Break%' -- In the middle of a sentence
    OR BusinessName like 'Break%'            -- At the beginning of a sentence

Ссылка ключевого слова для ПОДОБНОГО: http://msdn.microsoft.com/en-us/library/aa933232 (SQL.80) .aspx

3
ответ дан 8 December 2019 в 16:13
поделиться
where BusinessName like 'Break%' -- to find if it is beginning with the word
or BusinessName like '% Break%' -- to find if it contains the word anywhere but the beginning
4
ответ дан 8 December 2019 в 16:13
поделиться

Ваши ограничители слова будут многими: пространство, вкладка, начало строки, круглых скобок, периоды, запятые, восклицание/вопросительные знаки и т.д. Так, довольно простое решение состоит в том, чтобы использовать regex в Вашем операторе Where. (И это будет намного более эффективным, чем просто осуществление операции ИЛИ каждый возможный разделитель, о котором можно думать.)

Так как Вы упомянули LINQ, вот статья, которая описывает, как сделать эффективные запросы regex с SQL Server.

Сложные операторы Where как это всегда повышают красный флаг со мной, что касается производительности, таким образом, я определенно предлагаю сравнить независимо от того, что Вы заканчиваете с, можно решить создать поисковый индекс для столбца, в конце концов.

Править: Видел, что Вы отредактировали свой вопрос. При записи regex легко просто иметь его, используют любой non-alphanum символ в качестве разделителя, т.е. [^0-9a-zA-Z] или \W для любого несловесного символа, \b для любой границы слова и \B для любой границы неслова. Или, вместо того, чтобы соответствовать разделителям, просто распознайте любое слово, т.е. \w +. Вот другой пример кого-то делающего regex поиски с SQL Server (более сложный, чем, в чем Вы нуждались бы).

6
ответ дан 8 December 2019 в 16:13
поделиться
WHERE BusinessName LIKE '% Break%'
1
ответ дан 8 December 2019 в 16:13
поделиться

Вы упомянули LINQ - Вы могли сделать что-то как...

string myPattern = "% Break%";

var query =
      from b in Business
      where SqlMethods.Like(b.BusinessName, myPattern) 
      select b;

Обратите внимание, что это использует System.Linq.Data.SqlClient пространство имен, которое переводит непосредственно в LIKE оператор без дополнительной обработки.

1
ответ дан 8 December 2019 в 16:13
поделиться

Попробуйте следующее:

declare @vSearch nvarchar(100)

set @vSearch = 'About'

select * from btTab where ' ' + vText + ' ' LIKE '%[^A-z^0-9]' + @vSearch + '[^A-z^0-9]%'
0
ответ дан 8 December 2019 в 16:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: