sqlite 如果该列具有时间格式日期和时间,是否有办法选择今天(当前日期)创建的所有行?

7gyucuyw  于 2023-01-17  发布在  SQLite
关注(0)|答案(1)|浏览(153)

如果我有一个包含以下内容的表:

table_id    id_from_other_table    date_time_when_this_row_was_added
[(1,        200,                   '2023-01-06 08-11-21')]
[(2,        200,                   '2023-01-07 07-21-21')]
[(3,        200,                   '2023-01-07 08-10-10')]

我是否可以获取在今天的日期创建的所有行,这些行来自:

today_date = datetime.datetime.now().strftime("%Y-%m-%d")

尽管该列中的值的时间格式是这种时间格式?:

datetime.datetime.now().strftime("%Y-%m-%d %H-%M-%S")

我的查询如下:

id = 200
today_date = datetime.datetime.now().strftime("%Y-%m-%d")
query = 'SELECT * FROM table WHERE id = ? AND date_time_when_this_row_was_added LIKE ?%'
cursor.execute(query, (id, today_date)

但是返回的列表是空的。我想要的是获取今天创建的所有行(如果有的话),并返回今天创建的最新行。我知道如何获取今天创建的最新行,但我不知道如何获取今天创建的所有行(无论时间如何)。
我也尝试了此查询,返回的列表仍然为空:

id = 200
today_date = datetime.datetime.now().strftime("%Y-%m-%d")
query = 'SELECT * FROM table WHERE id = ? AND DATE(date_time_when_this_row_was_added) = DATE(?)'
cursor.execute(query, (id, today_date)
xwbd5t1u

xwbd5t1u1#

在SQLite中有no datetime data type,所以你的日期时间实际上是字符串。
尽管您用来存储日期的格式不是正确的ISO格式YYYY-MM-DD hh:mm:ss,但您可以使用字符串函数SUBSTR()来提取datetime的日期部分,并将其与当前日期(您可以使用SQLite的函数date()获取)进行比较,因此无需使用Python代码来获取当前日期并将其作为参数传递给查询:

query = """
  SELECT * 
  FROM tablename 
  WHERE id = ? 
    AND SUBSTR(date_time_when_this_row_was_added, 1, 10) = date()
"""
cursor.execute(query, (id,))

或者,如果要使用本地时间显示当前日期:

query = """
  SELECT * 
  FROM tablename 
  WHERE id = ? 
    AND SUBSTR(date_time_when_this_row_was_added, 1, 10) = date('now', 'localtime')
"""
cursor.execute(query, (id,))

相关问题