sql >> Database teknologi >  >> RDS >> Sqlserver

ude af stand til at kaste værdi som float

Med hensyn til din eftertanke.

SQL Server 2012 introducerer TRY_CONVERT til dette behov. Så den følgende forespørgsel ville returnere NULL snarere end en fejl.

SELECT TRY_CONVERT ( FLOAT, 'Fish')

Der er ingen garanti, selv med serielle planer, at WHERE klausul vil ske før SELECT er vurderet. Som forklaret i dette blogindlæg fra SQL Server 2005 og fremefter er det mere sandsynligt, at dette sker end i tidligere versioner. adfærdsændringer til databasemotorfunktioner i SQL Server 2005 kalder dette specifikt ud som følger.

Mere diskussion om denne adfærd er i et andet godt blogindlæg af Craig Freedman Konverterings- og aritmetiske fejl .

På versioner før 2012 og TRY_CONVERT du skal pakke CAST AS FLOAT i en CASE udmelding. f.eks.

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

Dette er stadig ikke helt garanteret for at forhindre, at du får fejl som ISNUMERIC selv tjekker bare, at værdien ville kaste til en af ​​de numeriske datatyper i stedet for specifikt at flyde Et eksempel på et input, der ville mislykkes, er '.'

CASE er dokumenteret for det meste kortslutning i bøger online (nogle undtagelser er diskuteret her )

Du kan også finde yderligere diskussion/klager om dette i forbindelsespunktet SQL Server bør ikke give ulogiske fejl og en god forklaring på et lignende problem af SQLKiwi



  1. PHP/MySQL Opdateringskode

  2. Upload flere billeder med PHP, der kun gemmer én filsti til MySQL-databasen

  3. Sådan indsætter du en python-liste i Postgres-tabellen

  4. En-til-mange-relation i MySQL - hvordan bygger man model?