Jest dyskusja (prawie religijna), czy powinieneś używać LIKE lub '=' do porównywania łańcuchów w instrukcjach SQL.
- Czy są powody, aby używać LIKE?
- Czy istnieją powody, aby używać znaku „=”?
- Występ? Czytelność?
sql
comparison
guerda
źródło
źródło
LIKE
a operator równości ma różne cele, nie robi tego samego:=
jest znacznie szybszy, podczas gdyLIKE
może interpretować symbole wieloznaczne. Używaj=
wszędzie, gdzie możesz iLIKE
gdzie musisz.Przykładowe mecze:
źródło
Z mojego małego doświadczenia:
„=” dla dokładnych dopasowań.
„LIKE” w przypadku dopasowań częściowych.
źródło
Istnieje kilka innych sztuczek, które Postgres oferuje do dopasowywania ciągów (jeśli tak się dzieje, że jest to twoja baza danych):
ILIKE, czyli dopasowanie LIKE bez rozróżniania wielkości liter:
Mecze:
A jeśli chcesz się naprawdę wkurzyć, możesz użyć wyrażeń regularnych:
Mecze:
źródło
Tak jak na początku, operator „=” dopełni łańcuchy spacjami w Transact-SQL. Więc
'abc' = 'abc '
wróci prawda;'abc' LIKE 'abc '
zwróci wartość false. W większości przypadków '=' będzie poprawne, ale w moim ostatnim przypadku tak nie było.Więc podczas gdy '=' jest szybsze, LIKE może wyraźniej określać twoje zamiary.
http://support.microsoft.com/kb/316626
źródło
Aby dopasować wzorce, użyj LIKE. Aby uzyskać dokładne dopasowanie =.
źródło
LIKE
jest używany do dopasowywania wzorców i=
jest używany do testu równości (zgodnie z definicjąCOLLATION
w użyciu).=
może używać indeksów, podczas gdyLIKE
zapytania zwykle wymagają testowania każdego rekordu w zestawie wyników w celu jego odfiltrowania (chyba że używasz wyszukiwania pełnotekstowego), więc=
ma lepszą wydajność.źródło
LIKE wykonuje dopasowywanie jak symbole wieloznaczne, znak [*,?] W powłoce
LIKE '% sufiks' - podaj mi wszystko, co kończy się sufiksem. Nie możesz tego zrobić z =
Zależy od przypadku.
źródło
Jest jeszcze jeden powód, dla którego warto używać „like”, nawet jeśli wydajność jest wolniejsza: wartości znaków są niejawnie konwertowane na liczby całkowite podczas porównywania, więc:
deklaruj @transid varchar (15)
jeśli @transid! = 0
zwróci błąd „Konwersja wartości varchar '123456789012345' przepełniła kolumnę typu int”.
źródło