例如,如果用户在时间戳列中插入“2017-03-13 12:16:18.0”, 同一用户不应该被允许在此栏中输入另一个值,如果它在同一天,即2017-03-13(在这种情况下)。或者最终,每当用户尝试在同一天插入两次时间戳日期时,使用先前插入的值('2017-03-13 12:16:18.0')更新时间戳列。我希望我已经足够明确了。
下面是我提出的一个无法运行的查询,但它显示了我希望查询最终要执行的操作。感谢您的帮助和反馈。
INSERT INTO hr.entry(id,entry_time)
VALUES (45,
CASE WHEN '13-03-2017'= CAST(SYSDATE() AS date) THEN
(UPDATE hr.entry
SET entry_time =
(SELECT entry_time
FROM hr.entry
WHERE id=45
AND CAST(entry_time AS date)= CAST(SYSDATE() AS date) )
ELSE
SYSDATE());
答案 0 :(得分:1)
您可以在表中添加DATE
列,并为该列添加唯一索引。然后,当您将时间戳插入时间戳列时,您还可以将该时间戳中的日期插入DATE
列。尝试插入其日期组件已存在于该表中的时间戳将导致MySQL抛出错误。
答案 1 :(得分:1)
我认为您将需要一个触发器,除非您使用YYYY-MM-DD HH:MI:SS格式将时间戳存储为字符串。我不是真的推荐这个。
因此,创建一个更新名为=Index($C$2:$C$6,Match(4.19, $B$2:$B$6,0))
的列的触发器。这只是提取时间戳的日期部分。
使用此列,您可以定义唯一索引:
timestamp_date
这将强制执行您的条件。
如果您决定将时间戳存储为字符串,则不需要触发器(尽管需要手动设置"时间戳")。相反,您可以使用前缀:
create unique index entry_userid_timestampdate on entry(userid, timestamp_date);