目标:NextDue
具有请求值时更新Priority
。 NextDue
更新时的日期为CurrentDate
加x
天。
编辑/更新:CurrentDate
是一个实际字段,而不是今天的日期。我将这个重新命名为前进。
错误:
从字符串转换日期时间时会话失败
代码:
Update TblDates
SET Priority = CASE
WHEN Priority='A' then NextDue + (CurrentDate +30)
WHEN Priority='B' then NextDue + (CurrentDate +730)
END
WHERE NextFRADue in ('A','B')
字段类型:
Priority = Text
NextFRADue = DateTime
CurrentDate = DateTime
日期存储为" YYYY-MM-DD"
答案 0 :(得分:3)
首先关闭:
您错误地解释了更新语句的语法
根据您编写这些内容的方式,您希望使用NextDate
更新DATEADD()
,而LastDate
则与Priority
有关,UPDATE <TableName>
SET <Column That Will Be Updated> = <Statement that determines the new value>,
<Column That Will Be Updated> = <Statement that determines the new value>
WHERE <Normal where clause>
。
更新语句的基本语法(根据MSDN)
UPDATE TblDates
-- Update the column NextDue
SET NextDue = CASE
-- Add NextDate number of days to the LastDate DateTime value, when the Priority value is 1
WHEN Priority='1' then DATEADD(day, (30+NextDate), LastDate)
-- Add NextDate number of days to the LastDate DateTime value, when the Priority value is 2
WHEN Priority='2' then DATEADD(day, (30+NextDate), LastDate)
END
WHERE NextFRADue in ('1','1')
因此,您对以下代码的评论不正确。
我需要做的是改变字段&#34; NextDate&#34;基于字段&#34; LastDate&#34;。
NextDate将是&#34; LastDate&#34;的前几天。这应该基于价值是第三个领域&#34;优先级&#34;Update TBLTEST SET LastDate = CASE WHEN Priority='1' THEN (NextDate+ DATEADD(Day, 30)) WHEN Priority='2' THEN (NextDate+ DATEADD(Day, 30)) END WHERE NextDate in ('1','2')
更新
从这里,您正在寻找的代码将是这样的:
Update TblDates
SET NextDue = CASE
WHEN Priority='A' then DATEADD(day, 30, CurrentDate)
WHEN Priority='B' then DATEADD(day, 730, CurrentDate)
END
WHERE NextFRADue in ('A','B')
进一步阅读:
MSDN: DATEADD
。
旧答案,因为不确定哪个版本适合您的问题
您正在寻找的代码将是这样的:
UISwipeGesture
答案 1 :(得分:1)
我们的代码段似乎有几个错误。在SQL Server中,您可以使用DATEADD添加日期:
UPDATE TblDates
SET NextDue= CASE WHEN Priority = 'A'
THEN DATEADD(DAY, 70, CurrentDate)
WHEN Priority = 'B'
THEN DATEADD(DAY, 730, CurrentDate)
END
WHERE NextFRADue IN ( 'A', 'B' )
我还更改了查询以更新NextDue。在您的代码示例中,您要将NextDue
添加到DATEADD(DAY, <days>, CurrentDate)
并使用此值更新优先级。