sql >> Databasteknik >  >> RDS >> Sqlserver

kan inte kasta värde som flytande

Angående din eftertanke.

SQL Server 2012 introducerar TRY_CONVERT för detta behov. Så följande fråga skulle returnera NULL snarare än ett fel.

SELECT TRY_CONVERT ( FLOAT, 'Fish')

Det finns ingen garanti även med serieplaner att WHERE sats kommer att ske före SELECT utvärderas. Som förklarat i detta blogginlägg från SQL Server 2005 och framåt är det mer sannolikt att detta händer än i tidigare versioner. beteendeändringar av databasmotorfunktioner i SQL Server 2005 uttrycker detta specifikt enligt följande.

Mer diskussion om detta beteende finns i ett annat bra blogginlägg av Craig Freedman Konverterings- och aritmetiska fel .

På versioner före 2012 och TRY_CONVERT du måste slå in CAST AS FLOAT i ett CASE påstående. t.ex.

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

Detta är fortfarande inte helt garanterat för att förhindra att du får felmeddelanden som ISNUMERIC själv kontrollerar bara att värdet skulle kastas till en av de numeriska datatyperna snarare än specifikt att flyta Ett exempel på en indata som skulle misslyckas är '.'

CASE är dokumenterat att det mestadels kortsluter i böcker online (några undantag diskuteras här )

Du kan också hitta ytterligare diskussioner/klagomål om detta i anslutningsobjektet SQL Server bör inte ge upphov till ologiska fel och en bra förklaring av ett liknande problem av SQLKiwi



  1. Heroku:misslyckas med att importera från S3

  2. Ytterligare en anledning att undvika sp_updatestats

  3. SQL Server - parametersniffning

  4. Hur felsöker man mysql användardefinierad funktion?