首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQLite实际上支持日期类型吗?

SQLite实际上支持日期类型吗?
EN

Stack Overflow用户
提问于 2021-01-06 13:02:15
回答 3查看 1K关注 0票数 0

在读取https://sqlite.org/datatype3.html后,哪个状态

"SQLite没有预留用于存储日期和/或时间的存储类。“

但能运行这个

代码语言:javascript
复制
CREATE TABLE User (ID INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, BORN_ON DATE NULL)

然后在"DB浏览器for SQL“中看到如下所示:

我开始怀疑SQLite是否支持日期类型,它的类型只是“伪造”使用其他类型的支持。既然如此,为何DB浏览器将其视为日期呢?数据库中有存储的元信息吗?

EN

回答 3

Stack Overflow用户

发布于 2021-01-06 13:51:08

SQLite不会用Numeric来伪造Date

Date中没有SQLite数据类型。

SQLite版本3中的数据类型中,我们清楚地解释:

SQLite使用更通用的动态类型系统。

而不是数据类型,有5个存储类NULLINTEGERREALTEXTBLOB

另外:

版本3数据库中的任何列(整数主键列除外)可用于存储任何存储类的值。

因此,当您使用Date作为CREATE TABLE语句中列的数据类型时,您并不局限于仅存储类似日期的值。实际上,你可以在那栏里存储任何东西。

“for SQLite”等工具在创建表时可能提供各种数据类型可供选择,以定义列。

您所选择的数据类型并不是限制性的,但它表示要在列中存储哪种类型的数据。

实际上,您可以在不声明列的数据类型的情况下创建一个表:

代码语言:javascript
复制
CREATE TABLE tablename(col1, col2) 

或者使用虚构的数据类型:

代码语言:javascript
复制
CREATE TABLE tablename(col1 somedatatype, col2 otherdatatype)

并插入任何数据类型的值:

代码语言:javascript
复制
INSERT INTO tablename(col1, col2) VALUES 
  (1, 'abc'),
  ('XYZ', '2021-01-06'),
  (null, 3.5)
票数 2
EN

Stack Overflow用户

发布于 2021-01-06 13:08:43

既然如此,为何DB浏览器将其视为日期呢?数据库中有存储的元信息吗?

是的,它只是存储创建列时使用的类型名称。链接页面称其为“声明类型”。在本例中,您获得了NUMERIC亲和力(DATE甚至作为3.1.1中的示例之一给出),它的行为与任何其他具有此关联的列一样:

具有数值关联的列可能包含使用所有五个存储类的值。当文本数据插入数字列时,如果文本是格式良好的整数或实文本,则文本的存储类将分别转换为整数或实(按优先顺序排列)。如果文本值是格式良好的整数文本,它太大,无法适应64位有符号整数,则将其转换为实值。对于文本和实际存储类之间的转换,只保留该数字的前15位有效小数。如果文本值不是格式良好的整数或实文本,则将该值存储为文本。为了本段的目的,十六进制整数文字不被认为是格式良好的,而是存储为文本。(这是为了与3.8.6 2014-08-15版本之前的SQLite版本进行历史兼容性,该版本首次将十六进制整数字引入到SQLite中。)如果可以精确表示为整数的浮点值插入到具有数值关联的列中,则该值将转换为整数。不尝试转换NULL或BLOB值。 字符串看起来可能像浮点文字,带有小数点和/或指数表示法,但只要该值可以表示为整数,数值关联就会将其转换为整数。因此,字符串'3.0e+5‘存储在一个列中,其数值关联为整数300000,而不是浮点值300000.0。

因此,如果您插入类似于"2021-01-05"的日期,它们将被存储为字符串。但

  1. 您还可以插入看起来不像日期的字符串。
  2. 如果插入"20210105",它将作为数字20210105存储。

可以使用CHECK约束来防止插入非日期字符串。

还请参阅datefunc.html,它说明(字符串和数字)格式日期/时间函数预期的格式。

票数 0
EN

Stack Overflow用户

发布于 2021-01-06 13:35:51

根据32上校的建议(在页面上阅读更多内容),当您将一个字段声明为日期时,它的关联将是数字的。

所以SQLite的“假”日期与数字。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65596276

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档