Если «поле даты» неправильно, мы можем установить дату по умолчанию автоматически - PullRequest
0 голосов
/ 02 марта 2020

Я автоматически получаю некоторые данные из другой таблицы. Столбец даты представляет собой строку. Я конвертирую этот столбец в DateTime. Но иногда поле даты появляется как "01.01.0002" или "01.01.0202". Когда это происходит вот так, я получаю эту ошибку:

"Переполнение SqlDateTime. Должно быть между 01.01.1753 12:00:00 и 12.12.3199 23:59:59 PM. "

Можно ли поместить оператор If, чтобы получить дату "1/1/1753" в качестве даты по умолчанию, когда это происходит неправильно?

1 Ответ

0 голосов
/ 02 марта 2020

Дата-время и Дата-время2 Типы данных минимальные и максимальные значения, как показано ниже

 +-----------+-----------------------------+------------------------------+-------------------------------------------------------------------------+
    | DataType  |             MIN             |             MAX              |                                 STORAGE                                 |
    +-----------+-----------------------------+------------------------------+-------------------------------------------------------------------------+
    | Datetime  | 1753-01-01 00:00:00.000     | 12/31/9999  12:00:00 AM      | 8 bytes                                                                 |
    | Datetime2 | 0001-01-01 00:00:00.0000000 | '9999-12-31 23:59:59.9999999 | Presicion 1-2 = 6 bytes precision 3-4 = 7 bytes precision 5-7 = 8 bytes |
    +-----------+-----------------------------+------------------------------+-------------------------------------------------------------------------+

В соответствии с этими сведениями вы можете использовать следующие преобразования для вашей проблемы. Если TRY_CAST не может преобразовать DateTime, он возвращает выражение NULL, поэтому мы изменим это значение NULL на " 1753-01-01 "

SELECT TRY_CAST(ISNULL(TRY_CAST('01.01.0002' AS DATETIME), '1753-01-01') AS DATETIME) DateTime_Convert, 
       TRY_CAST('01.01.0002' AS DATETIME2) AS DateTime2_Convert;

Результат:

Обновленный набор результатов

+-------------------------+-----------------------------+
|    DateTime_Convert     |      DateTime2_Convert      |
+-------------------------+-----------------------------+
| 1753-01-01 00:00:00.000 | 0002-01-01 00:00:00.0000000 |
+-------------------------+-----------------------------+
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...