2016-02-05 57 views
0

对于这个问题看似简单的问题,您好,并且对此表示歉意,但我是一个平庸的程序员,我在这里处理关键数据。在多个条件下的MS Access(OLEDB)更新表

我正在尝试更新表(Image)中的一列(PArchiveStatus),具体取决于每行中是否有某种状态(ParchiveStatus) is ((100 OR 200) AND ((timestamp>'2014-11-14 00:00:00') AND (timestamp<'2016-02-05 00:00:00')))。 (捕获的时间戳列的名称)之前和之后这两个日期不能触及

我想出了两个变化,无论是其工作的(笑)

什么

在正确的方向稍微推动将高度赞赏。

  1. 变化
    UPDATE [Image] SET [PArchiveStatus]='0' WHERE [PArchiveStatus] = 100 AND [Captured] BETWEEN '2014-11-14 00:00:00' AND '2016-02-05 00:00:00';

  2. 变化
    UPDATE [Image] SET [PArchiveStatus]='0' WHERE [PArchiveStatus]=100 AND [Captured]>'2014-11-14 00:00:00';

和朋友也告诉我这个
3.变异 UPDATE (SELECT * from Image where PArchiveStatus = 100) SET PArchiveStatus=0 Where Captured BETWEEN '2014-11-14 00:00:00' AND '2016-02-05 00:00:00'

也许我应该提到的是,在表中的日期/时间戳是不以任何其他的“格式”不是一个查询可用的,这意味着它必须被格式化为 YYYY-MM-DD HH:mm:ss(24小时格式)和我说实话不知道如果我能在一个单行查询中使用这种格式 (其中的方式是解决方案的另一个要求,因为我只能发送一行更新到数据库)

感谢任何善良的人帮助我解决这个问题。

解决方案

UPDATE [Image] SET [PArchiveStatus] = 0 WHERE [PArchiveStatus] = 100 AND [Captured] BETWEEN #2014-11-14# AND #2015-12-31# 
+0

存在此数据库中的.mdb文件 我基本上都在一个工具打开.mdb文件,并提交单行查询到它做的快速变化,而不是打开MS Access和编辑内容行按行。 –

回答

0

不知道为什么你尝试用一个字符串来更新。并且将表中的“日期”更改为真正的日期值。然后:

UPDATE 
    [Image] 
SET 
    [PArchiveStatus] = 0 
WHERE 
    [PArchiveStatus] = 100 
    AND 
    [Captured] > #2014-11-14 00:00:00#; 
+0

我可以为此添加第二个[Captured]条件吗? 类似 '... WHERE [PArchiveStatus] = 100 AND([捕获]>#2014-11-14 00:00:00#和[捕获]>#2014-11-14 00:00:00# );' (甚至可以在这些语句中使用括号来加权吗?) –

+0

是的,你可以这样做。你也有'在之间''。 – Gustav

+0

更正:(编辑问题):Captured字段的数据类型实际上设置为日期/时间,所以它应该格式良好。从我读的内容中我应该可以在'BETWEEN'语句中使用'#2014-11-14#'? –