我试图将所有这些组合成一个查询,如果它甚至可能的话。我正在使用SQLLite,因此我没有可用的存储过程。
查询的简单版本如下:
UPDATE FoodIntake SET MealType = 'B' WHERE Time < LunchStrt AND Time > BreakfastStart
但是必须得出时间:
SET Time = RIGHT(DateTime, 8)
并且必须根据从程序传递的参数从Patient表中引入LunchStart和BreakfastStart。像这样:
SELECT LunchStrt FROM Patient WHERE PatientId = :currentPatient AS LunchStrt
SELECT BrkStrt FROM Patient WHERE PatientId = :currentPatient AS BrkStrt
我想我终于可以通过交换Time for RIGHT(DateTime,8)来开始:
UPDATE FoodIntake SET MealType = 'B' WHERE RIGHT(DateTime, 8) < LunchStrt AND RIGHT(DateTime, 8) > BreakfastStart
但是如果可能的话,我不确定在更新中从Patient表中引入LunchStrt和BrkStrt的正确语法。
答案 0 :(得分:1)
一些注意事项:
RIGHT
功能,但您可以使用substr功能并传递负起始位置。WHERE substr(DateTime, -8) BETWEEN BreakfastStart AND LunchStrt
结合这三个选项,你可以这样写:
UPDATE FoodIntake
SET MealType = 'B'
WHERE substr(Time, -8)
BETWEEN (SELECT BrkStrt FROM Patient WHERE PatientId = :currentPatient)
AND (SELECT LunchStrt FROM Patient WHERE PatientId = :currentPatient)