Я использую алфавитную функцию сортировки и нуждаюсь в SQL-операторе для возврата записей, начинающихся со строки переменной длины. Однако записи также должны быть возвращены, если существуют периоды, пробелы или тире между каким-либо из символов в строке.
Например, значение передало в, мог быть (легкий) "M". Или "MA" (в этом случае это должно возвратить записи, запускающиеся с "MA", "M.A", "M", и "M-A"). Или "MAA", и так далее.
Это - оператор, который я имею до сих пор:
"SELECT * from table where LEFT(name," + value.Length + ")='" + value + "'"
Но я не могу разработать, как заставить это возвращать результаты, где существуют периоды, пробелы или тире в name
. Любая справка, создающая оператор, была бы большой.
Если вы работаете на MS SQL Server, вы можете использовать функцию replace, если у вас есть достаточно ограниченный набор "специальных" символов. Вы испортите использование индекса, но, скорее всего, вы все равно будете это делать. Например:
SELECT
name,
i_will,
never_use,
select_star
FROM
My_Table MT
WHERE
REPLACE(REPLACE(REPLACE(name, '.', ''), ' ', ''), '-', '') LIKE @prefix + '%'
Как вы можете видеть, оператор быстро становится громоздким по мере добавления "_", "(", ")" и т.д....
Похоже, это задание для регулярных выражений. Вы можете сделать это, вернув несколько совпадающих записей и применив Regex в ASP.NET и LINQ ... или, что более эффективно, вы можете применить его к своему оператору SQL.