sql >> Database >  >> RDS >> Sqlserver

kan waarde niet casten als float

Wat betreft uw gedachte.

SQL Server 2012 introduceert wel TRY_CONVERT voor deze behoefte. Dus de volgende query zou NULL opleveren in plaats van een fout.

SELECT TRY_CONVERT ( FLOAT, 'Fish')

Zelfs met seriële plannen is er geen garantie dat de WHERE clausule zal gebeuren voor de SELECT wordt geëvalueerd. Zoals uitgelegd in deze blogpost vanaf SQL Server 2005 is dit waarschijnlijker dan in eerdere versies. De gedragswijzigingen in Database Engine-functies in SQL Server 2005 noemt dit specifiek als volgt.

Meer discussie over dit gedrag staat in een andere goede blogpost van Craig Freedman Conversie- en rekenfouten .

Op versies vóór 2012 en TRY_CONVERT je moet de CAST AS FLOAT . inpakken in een CASE uitspraak. bijv.

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

Dit is nog steeds niet absoluut gegarandeerd om te voorkomen dat u fouten krijgt als ISNUMERIC zelf controleert alleen of de waarde naar een van de numerieke datatypes wordt gecast in plaats van specifiek te zweven Een voorbeeld van een invoer die zou mislukken is '.'

CASE is gedocumenteerd voor voornamelijk kortsluiting in boeken online (enkele uitzonderingen worden hier besproken )

U kunt ook aanvullende discussies/klachten hierover vinden in het connect item SQL Server mag geen onlogische fouten veroorzaken en een goede uitleg van een soortgelijk probleem door SQLKiwi



  1. CREER SCHEMA INDIEN NIET BESTAAT leidt tot dubbele sleutelfout

  2. 32-bits Excel en 64-bits SQL Server

  3. Hoe mySQL-informatie te splitsen om in HTML-kolommen te tonen

  4. Mysql datetime wordt 0000-00-00 00:00:00 in mysql-versie 5.6