Python 在SQLite中比较日期

Python 在SQLite中比较日期,python,sql,database,sqlite,Python,Sql,Database,Sqlite,我目前正在用python和SQLite做一个小项目,我有一个csv,它已经导入到一个数据库中,表名为:Members 每个成员都有一个格式为m/dd/yy的“加入日期”字段。以下是一些示例格式: 我无法更改csv中的值,因为当我打开此作业时,他们将使用与以下格式相同的文档 加入日期 1998年5月1日 6/4/97 1999年7月1日 1999年8月1日 1999年8月3日 1999年11月20日 2/2/00 1999年1月2日 1999年2月3日 我问的问题之一是: 检索1999-07-01

我目前正在用python和SQLite做一个小项目,我有一个csv,它已经导入到一个数据库中,表名为:Members

每个成员都有一个格式为m/dd/yy的“加入日期”字段。以下是一些示例格式:

我无法更改csv中的值,因为当我打开此作业时,他们将使用与以下格式相同的文档

加入日期 1998年5月1日 6/4/97 1999年7月1日
1999年8月1日
1999年8月3日
1999年11月20日
2/2/00
1999年1月2日
1999年2月3日

我问的问题之一是:

检索1999-07-01(yyyy-mm-dd)之后加入且来自VA的所有成员信息(可忽略VA部分)

我想做这样的事情,一开始是

SELECT * FROM Members WHERE "Date Joined" >= "1999-07-01" AND "State"="VA";

但我的问题是,我无法转换日期(我猜它是以字符串形式存储在数据库中的),因此可以将其与“1999-07-01”进行比较。

您可以尝试以下查询:

SELECT *
FROM yourTable
WHERE CAST(SUBSTR(SUBSTR(join_date, INSTR(join_date, '/') + 1), INSTR(SUBSTR(join_date, INSTR(join_date, '/') + 1), '/') + 1) AS INTEGER) <= 16 OR
      (
          CAST(SUBSTR(SUBSTR(join_date, INSTR(join_date, '/') + 1), INSTR(SUBSTR(join_date, INSTR(join_date, '/') + 1), '/') + 1) AS INTEGER) >= 99 AND
          CAST(SUBSTR(join_date, 1, INSTR(join_date, '/') - 1) AS INTEGER) >= 7
      )
这将提取从日期列到(但不包括)第一个正斜杠的所有内容。提取日期和年份需要更多的工作,因为
INSTR
会提取第一个匹配字符。在这种情况下,我们可以对日期进行子串,以删除所有内容,包括第一个正斜杠。因此,可以使用以下方法提取日期和年份:

SUBSTR(sub, 1, INSRT(sub, '/') - 1)      -- day
SUBSTR(sub, INSTR(sub, '/') + 1)         -- year

其中,
sub
作为
SUBSTR(join_date,INSTR(join_date,“/”)+1)获取

您的数据是错误的,因为您以一种奇怪的格式存储日期,即使是全年也会丢失。如果你有一整年、一个月、一天,你可以把这些数据串起来,这样比较。我做这个项目是作为一家公司的面试过程,他们给了我csv文件和数据。当我把它交上来时,他们会在他们的一端使用相同的csv文件,所以我不能真正“改变”我一端的csv文件以适应我想要做的事情。谢谢很公平。我发现了一个问题:考虑到目前的数据,你认为1999年之后的情况如何?如果你有完整的一年,你可以做
2000>1999
,但是
00
不大于
99
。这正是我所面临的。我上面提供的示例数据只包括2/2/00作为日期。但是,1999-07-01年之后的日期更多,但在同一年内。例如,8/1/99、8/3/99、11/20/99(db中的格式)。我认为您必须假设
00
始终表示
2000
,而不是年份
1900
。那么你真的在寻找
99
。我假设join\u date是我表中的“date Joined”列,而不是“1999-07-01”(他们给我的值)。我正在使用一个用于firefox的sqlite管理器插件,它让我在用python编写查询之前可以查看我的表/数据并运行查询。因此,我将尝试查询并让您知道结果@萨斯里尼瓦桑:你的假设是正确的。您的日期列名称有一个空格,这是我不想处理的。如果可能的话,我将与您一起运行此查询。它成功了!非常感谢你的帮助!对于未来的观众,请你解释一下你的逻辑。这是我第一次使用sqlite,作为将来的参考,我知道我将面临这样的问题(我相信很多人也面临过这样的问题)。
SUBSTR(sub, 1, INSRT(sub, '/') - 1)      -- day
SUBSTR(sub, INSTR(sub, '/') + 1)         -- year