关系代数:日期差值计算函数选择及筛选错误解决
解决关系代数中日期差值筛选的问题
这个问题在处理日期类型的关系代数操作里挺常见的——你直接用减法运算符(或者sub函数)去减两个日期类型的值,自然会报错,因为这类算术函数只认数值类型参数,不认日期类型。
针对你的需求,你需要用专门的日期差值计算函数,最通用的就是DATEDIFF(不同实现里可能写法略有差异,比如DATE_DIFF),它能直接计算两个日期之间的天数差,返回的是数值类型,这样就能和3做比较了。
正确的选择操作表达式
σ DATEDIFF(day, StartDate, EndDate) > 3 (Residence)
函数参数说明
- 第一个参数
day指定了差值的计算单位是“天”,确保我们得到的是两个日期之间的天数间隔 - 第二个参数是起始日期
StartDate,第三个是结束日期EndDate,函数会返回EndDate - StartDate的天数差(注意有些实现可能参数顺序反过来,要是运行报错可以调整顺序试试)
结合你的数据集验证
拿你给出的记录举例:
- 记录2(UID=2, HID=1):
2022-03-07 - 2022-03-03 = 4天,满足>3的条件,会被筛选出来 - 记录1(UID=1, HID=1):差值是3天,不满足条件,会被排除
- 所有EndDate在2022-04月的记录,差值都远大于3天,都会被选中
如果你的在线编辑器不认DATEDIFF,可以看看它的内置函数文档,大概率会有类似功能的日期差函数,核心思路就是把日期类型转换成可计算的数值天数差,再做比较。
内容的提问来源于stack exchange,提问作者Nicat




