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

nelze přenést hodnotu jako float

Ohledně vaší následné myšlenky.

SQL Server 2012 zavádí TRY_CONVERT pro tuto potřebu. Následující dotaz by tedy vrátil NULL spíše než chyba.

SELECT TRY_CONVERT ( FLOAT, 'Fish')

Ani u sériových plánů není zaručeno, že WHERE klauzule se stane před SELECT se hodnotí. Jak je vysvětleno v tomto příspěvku na blogu počínaje SQL Serverem 2005 je to pravděpodobnější než v předchozích verzích. Změny chování funkcí databázového stroje v SQL Server 2005 konkrétně to nazývá následovně.

Další diskuse o tomto chování je v jiném dobrém blogovém příspěvku od Craiga Freedmana Převod a aritmetické chyby .

Ve verzích před rokem 2012 a TRY_CONVERT musíte zabalit CAST AS FLOAT v CASE tvrzení. např.

  SELECT CASE WHEN ISNUMERIC(Col)=1 THEN CAST(Col AS FLOAT) END AS Col
  FROM Table
  WHERE ISNUMERIC(Col)=1

Stále není zcela zaručeno, že zabráníte chybám jako ISNUMERIC sám pouze zkontroluje, zda by hodnota byla přetypována na jeden z číselných datových typů, nikoli konkrétně na float Příkladem vstupu, který by selhal, je '.'

CASE je zdokumentován většinou zkrat v knihách online (některé výjimky jsou popsány zde )

Další diskuzi/stížnosti k tomuto můžete také najít v položce připojení SQL Server by neměl vyvolávat nelogické chyby a dobré vysvětlení podobného problému od SQLKiwi



  1. Seskupit podle data a zobrazit v datech a časech v sql

  2. Když je odeslán SIGTERM, ukončí podřízený proces připojení mysql?

  3. com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException:Po uzavření připojení nejsou povoleny žádné operace

  4. Jak odstranit konkrétní znak z řetězce, pouze pokud je to první nebo poslední znak v řetězci.