可以直接比较存储为字符串/文本的日期吗?

Dam*_*mon 6 sqlite string comparison datetime

我在SQLite工作,所以我将日期存储为文本.

YYYY-MM-DD hh:mm:ss

据我所知,我应该能够对它们进行排序或者将它们相互比较,就像它们不担心日期函数一样,因为任何递增都是向右开始并向左移动,就像数字一样,并且所有值都是数字,并且非数字字符总是标准化的,我正在使用24小时制.

我一直在网上看到人们提到如何将日期作为文本转换进行任何比较,但我不明白为什么他们不会只是按原样工作,只要它们处于最大 - 最小的顺序.显然我不能做数学,但Select DateTime From Table where DateTime > 2010-04-21 15:34:55应该完全可靠,对吧?

有没有我想不到的例外?

Pau*_*vre 5

这很好用.SQLite没有像许多其他数据库那样的实际DATE(或DATETIME)数据类型.您可以选择以正确排序的字符串格式(YYYY-MM-DD或YYYY-MM-DD hh:mm:ss)存储日期,或者将日期转换为数字并存储.

如果您使用字符串格式,那么您当然必须包含引号:

SELECT DateTime FROM Table WHERE DateTime > '2010-04-21 15:34:55'
Run Code Online (Sandbox Code Playgroud)


Mar*_*ijn 3

在数据库中存储日期时,\xe2\x80\x99 看到大量提及转换的原因是大多数数据库引擎都有 \xe2\x80\x98native\xe2\x80\x99 日期/时间数据类型。SQLite 不\xe2\x80\x99t。它建议您将日期存储为字符串或儒略日期浮点值。

\n\n

此外,其他一些数据库具有相当晦涩的日期到字符串函数(我\xe2\x80\x99m看着你,SQL Server),\xe2\x80\x99s很难弄清楚如何获取可排序的日期字符串。SQLite\xe2\x80\x99s 默认日期格式 (YYYY-MM-DD HH:NN:SS) 完全可排序且易于阅读。

\n\n

只要您使用正确的格式(就像您所呈现的那样),在比较或整理 \xe2\x80\x94 时,您\xe2\x80\x99 就可以很好地处理文本日期。

\n\n

事实上,您甚至可以使用 SQLite 的日期和时间函数进行数学计算;它们\xe2\x80\x99 相当非正统,但却非常灵活。

\n