在 SQLite Python 中获取从最大日期算起的一年日期

问题描述 投票:0回答:1

我正在尝试根据 SQLite 中的 max(date) 列获取一年的数据。我的逻辑适用于我在下面编写的 SQL Server。

代码:

"select * from {} t where NAME in {} and t.DATE1 > " \
                    "(select date(year, -1, max(t1.DATE1)) from {} t1)".format(TABLE_NAME, list_of_names,
                                                                                  TABLE_NAME)

从 SQLite 表中获取我的查询有任何更改吗?

sql sql-server sqlite sqlite3-python
1个回答
1
投票

在 SQLite 中,日期操作函数与 SQL Server 中的不同,这解释了为什么您现有的查询不能直接运行。 SQLite 使用

strftime
函数进行日期操作。要根据列中的最大日期获取一年的数据,您需要调整查询以使用 SQLite 的日期函数。

以下是修改 SQLite 查询的方法:

SELECT *
FROM {} t
WHERE NAME IN {} AND t.DATE1 > 
    (SELECT date(max(t1.DATE1), '-1 year') FROM {} t1)

此查询执行以下操作:

  1. SELECT * FROM {} t
    :选择表格中的所有列(将
    {}
    替换为
    TABLE_NAME
    )。

  2. WHERE NAME IN {}
    :过滤
    NAME
    列与
    list_of_names
    中的值匹配的行(将
    {}
    替换为您的姓名列表)。

  3. AND t.DATE1 > (SELECT date(max(t1.DATE1), '-1 year') FROM {} t1)
    :该子查询查找表中的最大日期并从中减去一年。然后,外部查询选择
    DATE1
    列大于此计算日期的行。

确保为 SQL 查询正确设置

list_of_names
格式。如果是 Python 列表,则需要将其转换为适合 SQL 的字符串格式,例如
('name1', 'name2', ...)

Python 中的最终查询将如下所示:

query = "SELECT * FROM {} t WHERE NAME IN {} AND t.DATE1 > (SELECT date(max(t1.DATE1), '-1 year') FROM {} t1)".format(TABLE_NAME, tuple(list_of_names), TABLE_NAME)

确保

TABLE_NAME
list_of_names
的格式正确并经过清理,以防止 SQL 注入攻击,尤其是来自用户输入的攻击。

© www.soinside.com 2019 - 2024. All rights reserved.