假设我有这样一个简单的数据库:
CREATE TABLE test (start TEXT, end TEXT, duration INTEGER);
这个 start 以及 end 是日期,持续时间是分钟。我想检查是否开始+持续时间<结束我知道我可以使用日期函数 datetime(start,'+14 minutes'); 但我如何使用另一个列值来实现这一点呢?
start
end
datetime(start,'+14 minutes');
y1aodyip1#
如果要创建约束 start + duration 总是小于 end 在表中,语法如下:
start + duration
CREATE TABLE test ( start TEXT, end TEXT, duration INTEGER, CHECK (DATETIME(start, duration || ' minute') < end) );
不需要串联 '+' .只有在日期列只有sqlite的有效日期格式是 YYYY-MM-DD hh:mm:ss .请注意,如果表已经存在,则不能添加约束。您必须使用上述模式(包括约束)创建一个新表,将旧表的数据复制到新表(如果它们满足约束的条件),删除旧表并重命名新表。
'+'
YYYY-MM-DD hh:mm:ss
7nbnzgx92#
可以构造字符串:
datetime(start, '+' || dur || ' minute')
bhmjp9jg3#
这就是你想要的?
dt_start < datetime(dt_end, '+' || duration || ' minute')
请注意 start 以及 end 在大多数数据库中都是语言关键字,因此列名不是很好的选择。我重新命名了那些列 dt_start 以及 dt_end 在上述代码中。
dt_start
dt_end
3条答案
按热度按时间y1aodyip1#
如果要创建约束
start + duration
总是小于end
在表中,语法如下:不需要串联
'+'
.只有在日期列只有sqlite的有效日期格式是
YYYY-MM-DD hh:mm:ss
.请注意,如果表已经存在,则不能添加约束。
您必须使用上述模式(包括约束)创建一个新表,将旧表的数据复制到新表(如果它们满足约束的条件),删除旧表并重命名新表。
7nbnzgx92#
可以构造字符串:
bhmjp9jg3#
这就是你想要的?
请注意
start
以及end
在大多数数据库中都是语言关键字,因此列名不是很好的选择。我重新命名了那些列dt_start
以及dt_end
在上述代码中。