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

WYBIERZ CASE CASE Błąd konwersji CAST

Nie możesz mieszać typów danych w wyrażeniach CASE (a przynajmniej nie dbając o to, aby niejawnie rzutowały OK)

w przypadku konfrontacji ze stwierdzeniem takim jak następujący SQL Server użyje pierwszeństwa typu danych, aby określić, jaki powinien być ogólny typ danych wyrażenia

SELECT CASE WHEN 1=1 THEN 'not-a-date' ELSE getdate() END

Dla powyższego datetime ma wyższy priorytet niż char więc niejawnie rzutuje łańcuch na datę, która się nie powiedzie.

Następujące jednak kończy się sukcesem jako sql_variant ma wyższy priorytet

SELECT CASE WHEN 1=1 THEN cast('not-a-date' as sql_variant) ELSE getdate() END

Możesz więc w ten sposób zwrócić wiele mieszanych typów danych (nie jestem pewien, jak łatwo jest sql_variant jest jednak pracować)

Poza tym możesz zwrócić NULL dla nieprawidłowych dat i godzin zamiast zwracania bezsensownych danych lub rzutowania wszystkiego na ciąg, jeśli musisz go zwrócić.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Rozwój maszyn wirtualnych platformy Azure do wykorzystania w programie SQL Server

  2. Instalowanie Ubuntu 18.04 dla SQL Server 2019 na maszynie wirtualnej przy użyciu VMware Workstation

  3. Typ danych do zapisania pliku Excela na serwerze sql?

  4. BCP - Nieprawidłowa wartość znaku dla specyfikacji rzutowania podczas importu do tabeli z kolumną IDENTITY

  5. Nieprawidłowa składnia w pobliżu słowa kluczowego 'with'...poprzednia instrukcja musi być zakończona średnikiem