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

SQL Server:IN ('asd') nefunguje, když je sloupec NTEXT

IN seznam je pouze zkrácený pro podmínky OR. LIKE klauzule funguje s NTEXT a TEXT pole. Můžete tedy tyto dva nápady zkombinovat:

WHERE (
       someNtext LIKE N'asd'
OR     someNtext LIKE N'asd1'
      )

Jak však @marc_s navrhl v komentáři k otázce, NVARCHAR(MAX) je upřednostňován, protože s ním pracují všechny řetězcové funkce (a TEXT , NTEXT a IMAGE datové typy byly od SQL Server 2005 zastaralé). Mohli byste proveďte inline převod, například:

WHERE CONVERT(NVARCHAR(MAX), someNtext) IN (N'asd', N'asd1')

ale pravděpodobně to nebude fungovat tak dobře jako použití LIKE klauzule s OR podmínky.

Poznámka: Při práci s NTEXT / NVARCHAR / NCHAR / XML data, je nejlepší vždy předpona řetězcových literálů s velkým "N". Pokud tak neučiníte, může dojít ke ztrátě dat u jakýchkoli znaků, které kódová stránka přidružená k výchozímu řazení databáze nepodporuje.

Další informace o práci s kolacemi / kódováním / Unicode / řetězci obecně na SQL Serveru naleznete na adrese:https://Collations. Informace/



  1. připojit vzdáleně k mysql

  2. formátovat interval s to_char

  3. pomalý dotaz mysql

  4. utf8 při importu do mysql zkomolený