Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

kann den Wert nicht als Float umwandeln

In Bezug auf Ihre Nachdenklichkeit.

SQL Server 2012 führt TRY_CONVERT ein für dieses Bedürfnis. Die folgende Abfrage würde also NULL zurückgeben eher ein Fehler.

SELECT TRY_CONVERT ( FLOAT, 'Fish')

Auch bei seriellen Plänen gibt es keine Garantie, dass der WHERE -Klausel wird vor dem SELECT vorkommen ausgewertet wird. Wie erklärt in diesem Blogbeitrag Ab SQL Server 2005 tritt dies häufiger auf als in früheren Versionen. Die Verhaltensänderungen an Datenbankmodulfunktionen in SQL Server 2005 ruft dies speziell wie folgt auf.

Weitere Diskussionen zu diesem Verhalten finden Sie in einem anderen guten Blogbeitrag von Craig Freedman Konvertierungs- und Rechenfehler .

Auf Versionen vor 2012 und TRY_CONVERT Sie müssen CAST AS FLOAT umschließen in einem CASE Aussage. z. B.

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

Dies ist immer noch nicht absolut sicher, dass Sie Fehler als ISNUMERIC erhalten selbst überprüft nur, ob der Wert in einen der numerischen Datentypen umgewandelt wird und nicht speziell in Float Ein Beispiel für eine fehlschlagende Eingabe ist '.'

CASE ist in Online-Büchern als meist kurzgeschlossen dokumentiert (einige Ausnahmen werden hier diskutiert ). )

Weitere Diskussionen/Beschwerden dazu finden Sie auch im Connect-Element SQL Server sollte keine unlogischen Fehler auslösen und ein gute Erklärung eines ähnlichen Problems von SQLKiwi