Оператор выбора SQL - возвращающиеся записи, запускающиеся со строки переменной длины

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

Например, значение передало в, мог быть (легкий) "M". Или "MA" (в этом случае это должно возвратить записи, запускающиеся с "MA", "M.A", "M", и "M-A"). Или "MAA", и так далее.

Это - оператор, который я имею до сих пор:

"SELECT * from table where LEFT(name," + value.Length + ")='" + value + "'"

Но я не могу разработать, как заставить это возвращать результаты, где существуют периоды, пробелы или тире в name. Любая справка, создающая оператор, была бы большой.

1
задан Daniel Dyson 27 May 2010 в 16:56
поделиться

2 ответа

Если вы работаете на MS SQL Server, вы можете использовать функцию replace, если у вас есть достаточно ограниченный набор "специальных" символов. Вы испортите использование индекса, но, скорее всего, вы все равно будете это делать. Например:

SELECT
    name,
    i_will,
    never_use,
    select_star
FROM
    My_Table MT
WHERE
   REPLACE(REPLACE(REPLACE(name, '.', ''), ' ', ''), '-', '') LIKE @prefix + '%'

Как вы можете видеть, оператор быстро становится громоздким по мере добавления "_", "(", ")" и т.д....

1
ответ дан 3 September 2019 в 00:16
поделиться

Похоже, это задание для регулярных выражений. Вы можете сделать это, вернув несколько совпадающих записей и применив Regex в ASP.NET и LINQ ... или, что более эффективно, вы можете применить его к своему оператору SQL.

http://msdn.microsoft.com/en-us/magazine/cc163473.aspx

1
ответ дан 3 September 2019 в 00:16
поделиться
Другие вопросы по тегам:

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