Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Поправете съобщение 241 „Преобразуването не бе успешно при преобразуване на дата и/или час от низ от знаци“ в SQL Server

Ако получавате съобщение за грешка на SQL Server 241, което гласи Преобразуването е неуспешно при преобразуване на дата и/или час от низ от знаци , вероятно защото се опитвате да преобразувате низ в стойност за дата/час, но този конкретен низ не може да бъде преобразуван в стойност за дата/час.

Пример за грешка

Ето пример за код, който създава грешката:

SELECT CAST('Tomorrow' AS date); 

Резултат:

Съобщение 241, ниво 16, състояние 1, ред 1 Преобразуването не бе успешно при преобразуване на дата и/или час от низ от знаци.

Тук се опитахме да преобразуваме низа Tomorrow до date тип, но Tomorrow не е валидна дата, която може да се преобразува в date тип.

SQL Server не може да преобразува низа в date и така върна грешка.

Решение 1

Най-очевидният начин да поправите това е да промените низа, за да прилича на действителна дата.

Ако предавате колона, проверете дали сте получили правилната колона. Същото, ако предавате променлива – проверете дали е правилната променлива.

Например следното преобразуване е успешно:

SELECT CAST('20 Feb 2030' AS date); 

Резултат:

20.02.2030

В зависимост от формата на въведената дата може да е по-добре да използвате CONVERT() функция, така че да можете да посочите формата на израза за входна дата.

Пример:

SELECT 
    CONVERT(date, '03/02/2030', 101) AS 'US with century',
    CONVERT(date, '03/02/30', 1) AS 'US without century',
    CONVERT(date, '03/02/2030', 103) AS 'British with century',
    CONVERT(date, '03/02/30', 3) AS 'US without century'; 

Резултат:

+-------------------+---------------------+--- ---------------------+---------------------+| САЩ с век | САЩ без век | Британски с век | САЩ без век ||------------------+---------------------+-- ---------------------+---------------------|| 2030-03-02 | 2030-03-02 | 2030-02-03 | 2030-02-03 |+------------------+---------------------+ ------------------------+---------------------+ 

Решение 2

Друг начин за справяне с грешката е да използвате или TRY_CAST() или TRY_CONVERT() . Тези функции връщат NULL вместо грешката.

Пример:

SELECT TRY_CAST('Tomorrow' AS date); 

Резултат:

NULL

Това обаче не решава непременно основния проблем, а просто го прикрива. Преобразуването все още не може да се осъществи.

Във всеки случай, това може да бъде жизнеспособна опция, в зависимост от вашите нужди.

Решение 3

Друг начин за справяне с грешката е да преобразувате низа в различен тип данни. Очевидно това не е добре, ако искате да завършите с date тип, но може би грешката е възникнала, защото случайно сте посочили date тип вместо другия тип.

Пример:

SELECT CAST('Wednesday' AS char(3)); 

Резултат:

Сряда

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Разберете дали даден обект е функция с стойност на таблица в SQL Server с OBJECTPROPERTY()

  2. SQL Server 2005 Използване на DateAdd за добавяне на ден към дата

  3. Как да получите всички таблици, които имат ограничение за първичен ключ, създадени в база данни на SQL Server - SQL Server / TSQL Урок 57

  4. База данни, която може да обработва>500 милиона реда

  5. Йерархичен списък на типовете тригерни събития в SQL Server 2017