Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Dlaczego użycie znaku podkreślenia w filtrze LIKE daje mi wszystkie wyniki?

Zmodyfikuj swój WHERE warunek taki:

WHERE mycolumn LIKE '%\_%' ESCAPE '\'

Jest to jeden ze sposobów, w jaki Oracle obsługuje znaki ucieczki. Tutaj definiujesz znak ucieczki za pomocą escape słowo kluczowe. Aby uzyskać szczegółowe informacje, zobacz ten link w Oracle Docs.

'_' i '%' są symbolami wieloznacznymi w LIKE instrukcja obsługi w SQL.

_ znak szuka obecności (dowolnego) pojedynczego znaku. Jeśli szukasz według columnName LIKE '_abc' , da wynik z wierszami zawierającymi 'aabc' , 'xabc' , '1abc' , '#abc' ale NIE 'abc' , 'abcc' , 'xabcd' i tak dalej.

'%' znak jest używany do dopasowania 0 lub więcej znaków. Oznacza to, że jeśli wyszukujesz według columnName LIKE '%abc' , da wynik z 'abc' , 'aabc' , 'xyzabc' i tak dalej, ale bez 'xyzabcd' , 'xabcdd' i każdy inny ciąg, który nie kończy się na 'abc' .

W twoim przypadku szukałeś według '%_%' . Spowoduje to, że wszystkie wiersze z tą kolumną będą miały jeden lub więcej znaków, czyli dowolne znaki, jako swoją wartość. Dlatego otrzymujesz wszystkie wiersze, mimo że nie ma _ w wartościach kolumn.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Błąd krytyczny:wywołanie niezdefiniowanej funkcji sqlsrv_connect() w C:\xampp\htdocs

  2. Znajdź maksymalną wartość i pokaż odpowiednią wartość z innego pola na serwerze SQL

  3. Właściwy sposób na zaimplementowanie unikalnego ograniczenia, które pozwala na wiele wartości NULL w SQL Server

  4. Używanie wyrażeń CASE w SQL Server

  5. Jak naprawić:„SQLServerAgent nie jest obecnie uruchomiony…”