使用SQL更改值,日期时间错误

时间:2015-04-23 11:47:12

标签: sql sql-server datetime

目标:NextDue具有请求值时更新PriorityNextDue更新时的日期为CurrentDatex天。

编辑/更新: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"

2 个答案:

答案 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)并使用此值更新优先级。