Как преобразовать Datetime в String, а затем String в Datetime - PullRequest
0 голосов
/ 28 октября 2019

Это строка.

DECLARE @Duration DATETIME = '2019-01-12'
DECLARE @DateFrom DATETIME = CONVERT(DATETIME, DATEADD(dd, -90, CONVERT(VARCHAR(10), @Duration)))
SELECT @DateFrom

Это сообщение об ошибке

Преобразование типа данных varchar в тип данных datetime привело к потерезначение диапазона.

и результаты sql равны NULL, но затронута 1 строка.

Ответы [ 3 ]

3 голосов
/ 29 октября 2019

Прекратите использовать CONVERT() для начала, вам это не нужно!

DATEADD() может принять переменную DATETIME как есть и вернуть DATETIME:

DECLARE @Duration DATETIME = '2019-01-12'
DECLARE @DateFrom DATETIME = DATEADD(dd, -90, @Duration)
SELECT @DateFrom

Может также принимать строковый литерал даты / времени и возвращает DATETIME:

DECLARE @DateFrom DATETIME = DATEADD(dd, -90, '2019-01-12')
SELECT @DateFrom
0 голосов
/ 28 октября 2019
DECLARE @DateVariable DATETIME
SET @DateVariable = '2019-01-12'
DECLARE @DateFrom DATETIME = CONVERT(DATETIME, DATEADD(dd, -90, CONVERT(VARCHAR(10), @DateVariable,103)))
SELECT @DateFrom

Я нахожу ответ здесь. Проблема с настройкой часового пояса. Укажите в других форматах, таких как мм / дд / гггг (обычно работает).

SQL - преобразование типа данных varchar в тип данных datetime привело к значению вне допустимого диапазона

0 голосов
/ 28 октября 2019

Используя функцию DATEADD , ваш запрос будет выглядеть примерно так в зависимости от того, что вы предоставили в своей задаче:

DECLARE @Date datetime2 = '2011-09-23 15:48:39.2370000'

SELECT DATEADD(day,-90,@Date)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...