Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

nie można oddać wartości jako zmiennoprzecinkowej

Jeśli chodzi o Twoje przemyślenia.

SQL Server 2012 wprowadza TRY_CONVERT dla tej potrzeby. Zatem następujące zapytanie zwróci NULL a nie błąd.

SELECT TRY_CONVERT ( FLOAT, 'Fish')

Nie ma gwarancji, nawet w przypadku planów szeregowych, że WHERE klauzula nastąpi przed SELECT jest oceniany. Jak wyjaśniono w tym poście na blogu od SQL Server 2005 jest to bardziej prawdopodobne niż w poprzednich wersjach. Zmiany zachowania funkcji aparatu bazy danych w programie SQL Serwer 2005 konkretnie nazywa to w następujący sposób.

Więcej dyskusji na temat tego zachowania znajduje się w innym dobrym poście na blogu Craiga Freedmana Błędy konwersji i arytmetyczne .

W wersjach wcześniejszych niż 2012 i TRY_CONVERT musisz zawinąć CAST AS FLOAT w CASE oświadczenie. np.

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

To nadal nie jest całkowicie gwarantowane, aby zapobiec otrzymywaniu błędów jako ISNUMERIC sama po prostu sprawdza, czy wartość zostanie rzucona na jeden z numerycznych typów danych, a nie konkretnie na float Przykładem danych wejściowych, które nie powiodło się, jest '.'

CASE jest udokumentowany w większości przypadków zwarcia w książkach online (omówiono tu pewne wyjątki )

Dodatkowe dyskusje/skargi na ten temat można znaleźć w elemencie connect SQL Server nie powinien zgłaszać nielogicznych błędów i dobre wyjaśnienie podobnego problemu przez SQLKiwi



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oblicz godziny pracy między dwiema datami

  2. uruchom procedurę składowaną i zwróć wartości z VBA

  3. Jak przekonwertować format daty systemowej na dd/mm/rr w SQL Server 2008 R2?

  4. SqlCommand.ExecuteScalar Anuluj

  5. „Zapytanie niedozwolone w Waitfor” Błąd 101 w SQL Server