【问题标题】:Is it possible to have try/catch type updates in SQLite?是否可以在 SQLite 中进行 try/catch 类型更新?
【发布时间】:2011-04-04 21:22:25
【问题描述】:
UPDATE Table SET Value = 5 WHERE DateTime = '03:42:34';

不过,有时DateTime 将不存在。我想知道是否有任何方法可以让它动态尝试

UPDATE Table SET Value = 5 WHERE DateTime = '03:42:35';

这可能是不可能的,特别是因为 'DateTime` 是一个字符串,但想知道是否有某种方法可以做到这一点。

我曾想过取 DateTime 的前 7 个字符并进行匹配,但这可能不够精确。

【问题讨论】:

  • 你到底想在这里做什么? DateTime 真的是时间的 varchar 吗?
  • 不,它也有日期,只是为了打字速度而省略了日期

标签: sql sqlite datetime


【解决方案1】:

CASE 表达式听起来可以为所欲为。

CASE 表达式发挥作用 类似于其他中的 IF-THEN-ELSE 编程语言。

出现的可选表达式 在 CASE 关键字和第一个关键字之间 WHEN 关键字被称为“基础” 表达。有两种基本形式 CASE 表达式的:那些带有 基本表达式和那些没有的。

在没有基本表达式的 CASE 中, 每个 WHEN 表达式都被求值并且 结果被视为布尔值, 从最左边开始 继续向右。的结果 CASE 表达式是评估 THEN 表达式的 对应于第一个 WHEN 计算结果为真的表达式。或者, 如果没有 WHEN 表达式 评估为真,结果为 评估 ELSE 表达式,如果 任何。如果没有 ELSE 表达式 并且没有任何 WHEN 表达式是 true,则整体结果为 NULL。

http://www.sqlite.org/lang_expr.html

【讨论】:

    【解决方案2】:

    这是你想要的吗?

    UPDATE Table
    SET Value = 5 
    WHERE DateTime =
           ( SELECT MIN(DateTime)
             FROM Table
             WHERE DateTime >= '03:42:34'
           )
    ;
    

    【讨论】:

      【解决方案3】:

      我以一种直截了当的方式完成了这项工作,我觉得最初没有想到很傻:

      UPDATE Table SET Value = 5 WHERE DateTime BETWEEN datetime('2020-03-21 03:42:35', '-1 second') and datetime('2020-03-21 03:42:35', '+1 second')

      【讨论】:

      • 请注意,此查询将在(1 秒)时间范围内使用 DateTime 更新所有行,即使它们超过 1 行,即使有 1000 行。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-12
      • 2015-02-11
      • 2020-12-11
      • 2018-09-28
      • 1970-01-01
      • 2018-08-20
      相关资源
      最近更新 更多