这是一行。
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行。
答案 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(通常有效)。