orientdb仅更新字段,如果为null

时间:2017-06-20 13:49:00

标签: orientdb

我正在尝试找到一种方法来使用orientdb运行更新查询,其中我更新了多个属性。我将在边缘上有两个属性,一个名为acknowred_at,另一个名为read_at。在read_at更新之前,acknowred_at字段可以更新。但是,我想确保当我更新所有read_at字段时,我还要确保任何confirmged_at字段也会使用当前时间戳更新(如果之前未设置)。

我的用例是让facebook像通知一样。用户可以确认通知但当时不能读取。但是如果他们点击read_all按钮,或者稍后决定“读取”该通知,那么我想确保我也更新了acknowred_at属性(如果它是null)。

有没有办法在acknowred_at字段上进行case语句类型更新,只更新为null?

更新:为了使其更清楚,我总是想更新read_at字段,但只想更新confirmged_at字段(如果它为null)。如果先前已确认,我希望保留该值。

UPDATE EDGE received SET read_at = '#{DateTime.now}', acknowledged_at = '#{DateTime.now}' WHERE out.employeeId = '#{employeeId}'

2 个答案:

答案 0 :(得分:0)

试试这个(或变体)

UPDATE... SET read_at = IF(read_at > 0, read_at, '#{DateTime.now}')

答案 1 :(得分:0)

UPDATE EDGE收到SET ... WHERE acknowred_at IS NULL

<强> UDPATE

这对我有用

update edge received set read_at = "2017-06-23 19:29:00",acknowledged_at=ifnull(acknowledged_at, "2017-06-23 19:29:00") WHERE out.employeeId = 'A002'

REF。 https://orientdb.com/docs/2.2/SQL-Functions.html