如何将日期时间转换为字符串,然后将字符串转换为日期时间

时间:2019-10-28 09:14:07

标签: sql sql-server delphi

这是一行。

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 个答案:

答案 0 :(得分:3)

停止使用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

答案 1 :(得分:0)

使用DATEADD函数,根据您所提供的问题,您的查询将是这样的:

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

SELECT DATEADD(day,-90,@Date)

答案 2 :(得分:-3)

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

我在这里找到答案。问题出在时区设置上。以其他格式指定,例如mm / dd / yyyy(通常有效)。

SQL - The conversion of a varchar data type to a datetime data type resulted in an out-of-range value