python - Sqlite3:如何将月/年的范围作为单独的文本字段进行匹配
问题描述
这是 sqlite3,它不包括我在此处阅读的其他 SQL 实现的其他解决方案。
我有一个表“DR”,其中除其他数据外,还有“月”列(没有零填充的 1-12)和“年”(yyyy)列,它们都是文本列。
我想检索月/年在两个特定配对之间的所有行,例如从 2017 年第 6 个月到 2020 年第 4 个月。这 4 个值也作为文本输入(来自 python),当月没有填充. 我想确保也处理不到一整年的情况,例如 2017 年第 2 个月到 2017 年第 10 个月。
我想出了如何通过蛮力使用数量荒谬的 OR 并且从未触及实际的日期相关函数来做到这一点,但我想知道是否有更优雅的方法来利用 sql 实际上理解日期大于或小于具有跨年份边界滚动月份数的另一个日期。
感谢您提供任何帮助!
解决方案
如果正确理解您的问题 - 当您的表格仅包含月份和年份数字时,您希望应用日期范围过滤器?
您可以创建一个辅助“日期”表来加入您的 CR 表:
create table digits (value integer);
-- create auxiliary digits table (for generating dates)
insert into digits values (1),(2),(3),(4),(5),(6),(7),(8),(9);
create table numbers (value integer);
-- create auxiliary numbers table (for generating dates)
insert into numbers (value)
select d1.value + d2.value * 10 + d3.value *100 as value
from digits as d1
cross join digits as d2
cross join digits as d3;
-- create auxliary dates table
create table dates (month_begin_date, month_number, year_number);
insert into dates (
month_begin_date
,month_number
,year_number)
select date('now', '-'|| value || ' day')
, cast(strftime('%m',date('now', '-'|| value || ' day')) as integer) as month_number
, cast(strftime('%Y',date('now', '-'|| value || ' day')) as Integer) as year_number
from numbers
where cast(strftime('%d',date('now', '-'|| value || ' day')) as integer) = 1;
create table CR (month_number integer, year_number integer, some_column varchar(100));
insert into CR values
(1, 2020, 'a'),
(2, 2020, 'b'),
(3, 2020, 'c'),
(4, 2020, 'd');
-- join 'CR' table to auxiliary table here for final filtering
select dates.month_begin_date, dates.month_number, dates.year_number, CR.some_column
from dates
inner join CR
on CR.month_number = dates.month_number
and CR.year_number = dates.year_number
where dates.month_begin_date > '1/1/2020' and dates.month_begin_date < '3/1/2020';
推荐阅读
- javascript - phpmailer和javascript配置
- c - 如何从应用程序中执行调试器命令
- mysql - 相关视频 数据库表结构
- c# - 将数据和文件从 MVC 控制器 (NET Framework 4.6.1) 发送到 WebAPI 控制器 (NET Core 3.0)
- java - 如何使用 Android 上传服务上传从相机获取的图像
- python - 如何在 mac 上运行 virtualenv python
- python - pandas Dataframe 上混合类型的 np.isnan() 中的潜在错误
- swift - 如何加载相机扫描仪?
- javascript - 使用 ES6 合并 2 个对象数组,并在一个数组中显示未出现在另一个数组中的对象
- kubernetes - 创建 ClusterRoleBinding 时使用 apiGroup 和 RoleRef 的问题