Powinienem użyć!= or < > for not equal in T-SQL?
Widziałem SQL
, który używa zarówno !=
jak i <>
do nie równe. Jaka jest preferowana składnia i dlaczego?
Lubię !=
, Ponieważ <>
przypomina mi Visual Basic
.
14 answers
Technicznie działają tak samo, jeśli używasz SQL Server AKA T-SQL. Jeśli używasz go w procedurach przechowywanych, nie ma powodu do działania, aby używać jednego nad drugim. Następnie sprowadza się do osobistych preferencji. Wolę używać , ponieważ jest zgodny z ANSI.
Możesz znaleźć linki do różnych standardów ANSI na stronie...
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-01 19:28:15
Większość baz danych obsługuje !=
(popularne języki programowania) i <>
(ANSI).
Bazy danych obsługujące zarówno !=
jak i <>
:
- MySQL 5.1:
!=
i<>
- PostgreSQL 8.3:
!=
i<>
- SQLite:
!=
i<>
- Oracle 10g:
!=
i<>
- Microsoft SQL Server 2000/2005/2008/2012/2016:
!=
oraz<>
- IBM Informix Dynamic Serwer 10:
!=
i<>
- InterBase / Firebird:
!=
i<>
- Apache Derby 10.6:
!=
i<>
- Sybase Adaptive Server Enterprise 11.0:
!=
i<>
Bazy danych obsługujące standardowy operator ANSI, wyłącznie :
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-14 10:05:27
'<>'
jest ze Standardu SQL-92 i '!='
jest operatorem zastrzeżonym T-SQL. Jest on dostępny również w innych bazach danych, ale ponieważ nie jest to standard, musisz wziąć go indywidualnie.
W większości przypadków będziesz wiedział, do jakiej bazy danych się łączysz, więc nie jest to naprawdę problem. W najgorszym przypadku może być konieczne przeszukanie i zastąpienie w SQL.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-29 16:38:46
Standard ANSI SQL definiuje <>
jako operator "nie równy",
Http://www.contrib.andrew.cmu.edu / ~shadow/sql/sql1992.txt (5.2 <token> and <separator>
)
Nie istnieje operator !=
zgodnie ze standardem ANSI/SQL 92.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-11-01 06:49:25
<>
jest poprawnym SQL zgodnie ze standardem SQL-92.
Http://msdn.microsoft.com/en-us/library/aa276846(SQL. 80). aspx
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-06 06:50:41
Oba są poprawne i takie same w odniesieniu do SQL Server ,
Https://docs.microsoft.com/en-us/sql/t-sql/language-elements/not-equal-to-transact-sql-exclamation
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-20 11:33:43
Wydaje się, że Microsoft woli <>
od !=
, o czym świadczą ograniczenia tabel. Osobiście wolę używać !=
, ponieważ wyraźnie odczytuję to jako "nie równe", ale jeśli wpiszesz [field1 != field2]
i zapiszesz to jako ograniczenie, następnym razem, gdy zapytasz, pojawi się to jako [field1 <> field2]
. To mówi mi, że poprawnym sposobem jest <>
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-06 06:51:44
!=
, pomimo tego, że nie jest ANSI, jest bardziej w prawdziwym duchu SQL jako języka czytelnego. To krzyczy nie równe.
<>
mówi, że to dla mnie (mniej niż, więcej niż), co jest po prostu dziwne. Wiem, że intencją jest to, że jest albo mniejsza, albo większa niż stąd nie równa, ale to naprawdę skomplikowany sposób powiedzenia czegoś naprawdę prostego.
Po prostu musiałem wziąć kilka długich zapytań SQL i umieścić je w pliku XML z wielu głupich powodów nie pójdę do.
Wystarczy powiedzieć, że XML w ogóle nie jest z <>
i musiałem je zmienić na !=
i sprawdzić sam zanim się ruszyłem.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-06 06:52:23
Możesz użyć dowolnego, co chcesz w T-SQL. Dokumentacja mówi, że oba działają w ten sam sposób. Preferuję !=
, ponieważ czyta się "nie równa" mojemu (opartemu na C/C++/C#) umysłowi, ale Guru baz danych wydają się preferować <>
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-12 15:13:39
Rozumiem, że składnia C !=
jest w SQL Server ze względu na uniksowe dziedzictwo (w czasach Sybase SQL Server, pre Microsoft SQL Server 6.5).
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-04 02:14:57
Alternatywą byłoby użycie operatora NULLIF innego niż <>
lub !=
, który zwraca NULL, jeśli oba argumenty są równe NULLIF w dokumentach Microsoft . Więc uważam, że gdzie klauzula może być zmodyfikowana dla <>
i !=
w następujący sposób:
NULLIF(arg1, arg2) IS NOT NULL
Jak stwierdziłem, używanie <>
i !=
w niektórych przypadkach nie działa. Stąd użycie powyższego wyrażenia nie jest potrzebne.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-10 10:26:59
Wolałem używać !=
zamiast <>
, ponieważ czasami używam składni <s></s>
do pisania poleceń SQL. Użycie !=
jest bardziej przydatne, aby uniknąć błędów składniowych w tym przypadku.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-10 17:57:49
Oba są akceptowane w T-SQL. Wydaje się jednak, że za pomocą <>
działa dużo szybciej niż !=
. Po prostu uruchomiłem złożone zapytanie, które używało !=
, i trwało to średnio około 16 sekund. Zmieniłem je na <>
i zapytanie zajmuje teraz średnio około 4 sekund, aby uruchomić. To ogromna poprawa!
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-29 16:43:18
Chociaż działają one w ten sam sposób, !=
oznacza dokładnie "nie równe", podczas gdy {[1] } oznacza większe i mniejsze od przechowywanej wartości.
Rozważ >=
lub <=
, a to będzie miało sens przy faktorowaniu w Twoich indeksach zapytań... <>
będą działać szybciej w niektórych przypadkach (z odpowiednim indeksem), ale w innych przypadkach (bez indeksów) będą działać tak samo.
Zależy to również od tego, jak Twój system baz danych odczytuje wartości !=
i <>
. Dostawca bazy danych może po prostu skróć go i spraw, aby funkcjonowały tak samo, więc nie ma żadnej korzyści. PostgreSQL i SQL Server nie skracają tego skrótu; jest on odczytywany tak, jak widać powyżej.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-29 16:44:59