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

Błąd SQL:konwersja typu danych varchar na typ danych data/godzina spowodowała wartość spoza zakresu

Bezpieczne formaty ciągów daty i godziny używane w SQL Server to

YYYYMMDD HH:MM:SS lub YYYY-MM-DDTHH:MM:SS .

Konwersja nie powiedzie się, jeśli USTAW FORMAT DATY jest dmy. USTAW JĘZYK automatycznie ustawi dla Ciebie format daty. Myślę, że zarówno german i norwegian użyj dmy.

To się nie powiedzie:

set language norwegian

declare @F7 varchar(10) = '26/04/2011'
declare @F8 varchar(10) = '00:09:13'

DECLARE @Date VARCHAR(20)
SET @Date = RIGHT(@F7,4)+'/'+SUBSTRING(@F7,4,2)+'/'+LEFT(@F7,2)

DECLARE @time DATETIME
SET @time =  CONVERT(DATETIME, @Date + ' ' + @F8)

Zamiast tego zrób to (używając RRRR-MM-DDTHH:MM:SS), aby zapewnić bezpieczeństwo niezależnie od ustawień języka/formatu daty.

declare @F7 varchar(10) = '26/04/2011'
declare @F8 varchar(10) = '00:09:13'

DECLARE @Date VARCHAR(20)
SET @Date = RIGHT(@F7,4)+'-'+SUBSTRING(@F7,4,2)+'-'+LEFT(@F7,2)

DECLARE @time DATETIME
SET @time =  CONVERT(DATETIME, @Date + 'T' + @F8)


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak rozwiązać Oświadczenie nie zwróciło błędu zestawu wyników?

  2. Czy możesz wywołać usługę internetową z kodu TSQL?

  3. nie można połączyć się z serwerem sql 2008 z innego komputera

  4. Jak mogę uniknąć używania Cursora do implementacji tego pseudokodu - SQL Server?

  5. Jak NULLIF() działa w SQL Server