Оператор выбора SQL - возвращение записей, начинающихся со строки переменной длины - PullRequest
1 голос
/ 27 мая 2010

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

Например, переданное значение может быть «M» (просто). Или «MA» (в этом случае необходимо возвращать записи, начинающиеся с «MA», «M.A», «M A» и «M-A»). Или "МАА" и т. Д.

Это утверждение, которое я имею до сих пор:

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

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

Ответы [ 2 ]

1 голос
/ 27 мая 2010

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

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

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

1 голос
/ 27 мая 2010

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...