sql >> Databáze >  >> RDS >> Sqlserver

Klauzule SQL WHERE porovnává hodnoty s koncovými mezerami

To je očekávaný výsledek:v SQL Server = Operátor při porovnávání ignoruje koncové mezery.

SQL Server se řídí specifikací ANSI/ISO SQL-92 (oddíl 8.2, , Obecná pravidla #3), jak porovnávat řetězce s mezerami. Standard ANSI vyžaduje odsazení pro znakové řetězce používané při porovnávání, aby se jejich délky před porovnáním shodovaly. Výplň přímo ovlivňuje sémantiku predikátů klauzule WHERE a HAVING a dalších porovnávání řetězců Transact-SQL. Například Transact-SQL považuje řetězce 'abc' a 'abc' za ekvivalentní pro většinu operací porovnání.

Jedinou výjimkou z tohoto pravidla je predikát LIKE. Když pravá strana výrazu predikátu LIKE obsahuje hodnotu s koncovou mezerou, SQL Server nevyplní dvě hodnoty na stejnou délku, než dojde k porovnání. Protože účelem predikátu LIKE je podle definice usnadnit vyhledávání vzorů spíše než jednoduché testy rovnosti řetězců, neporušuje to sekci specifikace ANSI SQL-92 zmíněnou dříve.

Zdroj



  1. Osvědčený postup pro vytváření indexů v tabulkách MySQL – Rolling Index Builds

  2. Vložit/aktualizovat pomocnou funkci pomocí PDO

  3. Funkce LISTAGG() v Oracle

  4. Třída nenalezena načítání JDBC org.postgresql.Driver