Ответ 1
Используйте что-то вроде этого -
SELECT DISTINCT COL_NAME FROM myTable WHERE UPPER(COL_NAME) LIKE UPPER('%PriceOrder%')
или
SELECT DISTINCT COL_NAME FROM myTable WHERE LOWER(COL_NAME) LIKE LOWER('%PriceOrder%')
У меня есть следующие данные в таблице
PriceOrderShipped
PriceOrderShippedInbound
PriceOrderShippedOutbound
В SQL мне нужно написать запрос, который ищет строку в таблице. При поиске строки он должен игнорировать регистр. Для приведенного ниже SQL-запроса
SELECT DISTINCT COL_NAME FROM myTable WHERE COL_NAME LIKE '%PriceOrder%'
дает все вышеперечисленные данные, тогда как
SELECT DISTINCT COL_NAME FROM myTable WHERE COL_NAME LIKE '%PriceOrder%'
не дает.
Eg. когда я ищу "PriceOrder" или "priceOrder", он работает, но "priceorder" или "Priceorder" не работает. Я попытался с использованием нижеследующего запроса, используя COLLATE, но он не работает. Дайте мне знать, где я ошибаюсь.
SELECT DISTINCT COL_NAME FROM myTable WHERE
COL_NAME COLLATE latin1_general_cs LIKE '%Priceorder%'
Используйте что-то вроде этого -
SELECT DISTINCT COL_NAME FROM myTable WHERE UPPER(COL_NAME) LIKE UPPER('%PriceOrder%')
или
SELECT DISTINCT COL_NAME FROM myTable WHERE LOWER(COL_NAME) LIKE LOWER('%PriceOrder%')
См. этот похожий вопрос и ответ на поиск с нечувствительностью к регистру - SQL Server игнорировать регистр в выражении where
Попробуйте использовать что-то вроде:
SELECT DISTINCT COL_NAME
FROM myTable
WHERE COL_NAME COLLATE SQL_Latin1_General_CP1_CI_AS LIKE '%priceorder%'
Вероятно, вы должны использовать SQL_Latin1_General_Cp1_CI_AS_KI_WI
как свою сортировку. Тот, который вы указываете в своем вопросе, явно чувствителен к регистру.
Вы можете увидеть список сопоставлений здесь.