SQLite中基于时间比较的WHERE子句构建技术咨询
SQLite筛选提前注册用户的WHERE子句实现方案
针对你的需求,这里提供两种可行的实现方式,取决于registered at列的实际数据类型:
情况1:registered at是字符串格式(如YYYY-MM-DD HH:MM:SS)
如果该列是带日期的时间字符串,直接用SUBSTR函数提取时间部分(从第12位开始,跳过前面的日期和空格),再和vax start time列比较:
SELECT * FROM COREGAMasterDatabasePowerBI AS A JOIN COREGAScheduling15 AS B ON soundex(A.Location) LIKE soundex(B.Site_Name) AND A.Visit_time = B.Date WHERE SUBSTR(A.`registered at`, 12) < B.`vax start time` ORDER BY B.date ASC
情况2:registered at是SQLite原生datetime类型
如果该列已经是SQLite支持的日期时间类型,用TIME()函数直接提取时间部分进行比较即可:
SELECT * FROM COREGAMasterDatabasePowerBI AS A JOIN COREGAScheduling15 AS B ON soundex(A.Location) LIKE soundex(B.Site_Name) AND A.Visit_time = B.Date WHERE TIME(A.`registered at`) < B.`vax start time` ORDER BY B.date ASC
注意事项
- 列名包含空格时,必须用反引号
`包裹,避免SQL语法错误; - 不推荐用LIKE通配符做时间比较,因为通配符是字符串模糊匹配逻辑,无法精准处理时间的大小关系,用专门的字符串截取或时间函数更可靠。
内容的提问来源于stack exchange,提问作者shadow
相关产品推荐
相关产品推荐

