android - 在SQLite数据库浏览器中创建时间戳

标签 android sqlite android-sqlite

我正在使用用于SQLite的数据库浏览器,而我现在才是新手。我正在寻找属性的时间戳类型。换句话说,时间戳是真实的吗?

enter image description here

我已经编辑了类型及其默认的先生。这是对的吗?

enter image description here

最佳答案

SQLite具有动态/灵活类型,除了rowid列的别名(INTEGER PRIMARY KEY(带或不带AUTOINCREMENT)或rowid列本身)之外,SQLite允许任何列保存任何存储类型的数据( TEXT,INTEGER,REAL,NULL或BLOB)。

定义一列后,该列类型会根据一组规则分解为5种列类型之一(列关联性)(请参见下面的链接),

例如即使..(mycolumn Rumplestilskin)也有效,因为它解析为NUMERIC *的类型相似性(规则5-有关规则,请参见下面的链接)。 DECIMALDECIMAL(10,5)也下降到规则5,因此导致类型亲和力为** NUMERIC。

上面是Datatypes In SQLite Version 3 的概述

因此,除了考虑类型相似性对提取时对数据的影响之外,列类型并不是真正的因素。

重要的是您存储的实际数据。

在日期/时间戳的情况下,最好将数据存储为可接受的时间字符串之一:


  
    时间字符串可以采用以下任何一种格式:

YYYY-MM-DD
YYYY-MM-DD HH:MM
YYYY-MM-DD HH:MM:SS
YYYY-MM-DD HH:MM:SS.SSS
YYYY-MM-DDTHH:MM
YYYY-MM-DDTHH:MM:SS
YYYY-MM-DDTHH:MM:SS.SSS
HH:MM
HH:MM:SS
HH:MM:SS.SSS
now
DDDDDDDDDD

  
  
  在格式5到7中,“ T”是一个文字字符,用于分隔
  日期和时间,符合ISO-8601的要求。
  
  格式化8到10
  仅指定时间,假设日期为2000-01-01。
  
  格式11,字符串
  “现在”转换为从中获取的当前日期和时间
  使用的sqlite3_vfs对象的xCurrentTime方法。 “现在”
  日期和时间函数的参数始终返回完全相同的参数
  同一sqlite3_step()调用中多个调用的值。
  使用世界标准时间(UTC)。
  
  格式12是儒略日
  表示为浮点值的数字。
  
  格式2到10可以可选地跟一个时区
  指标的形式为“ [+-] HH:MM”或“ Z”。日期和时间
  函数内部使用UTC或“ zulu”时间,因此后缀“ Z”为
  一个没有人。从指示的值中减去任何非零的“ HH:MM”后缀
  日期和时间以计算祖鲁时间。例如,所有
  以下时间字符串是等效的:

2013-10-07 08:23:19.120
2013-10-07T08:23:19.120Z
2013-10-07 04:23:19.120-04:00
2456572.84952685 

  
  在格式4、7和10中,小数秒数值SS.SSS可以具有
  小数点后的一位或多位数字。
  示例中仅显示了三位数,因为只有前三位数是
  对结果有意义,但是输入字符串可以具有更少或更多
  超过三位数,日期/时间功能仍将运行
  正确地。
  
  同样,格式12显示为10个有效数字,
  但日期/时间函数实际上会接受或多或少
  代表儒略日数所必需的数字。


Time Strings

该链接立即还包括日期/时间函数及其使用示例。

考虑以下 :-

DROP TABLE IF EXISTS savetimestamps;
CREATE TABLE IF NOT EXISTS savetimestamps (
  name TEXT,
    ts01 rumplestiltskin DEFAULT CURRENT_TIMESTAMP, 
    ts02 INTEGER DEFAULT CURRENT_TIMESTAMP,
    ts03 myreallybigintbutrealllyitisjustandint DEFAULT CURRENT_TIMESTAMP,
    ts04 BLOB DEFAULT CURRENT_TIMESTAMP,
    ts05 REAL DEFAULT CURRENT_TIMESTAMP
);
INSERT INTO savetimestamps (name) VALUES('A');
INSERT INTO savetimestamps VALUES(1,'a',3.725,4,5,x'010203040506070809'); -- useless/confusing data
SELECT *,
    rowid AS id,
    STRFTIME('%d %M %Y', ts01) AS t1,
    STRFTIME('%d %M %Y', ts02, '-1 DAYS') AS t2,
    STRFTIME('%d %M %Y', ts03, '-2 DAYS') AS t3,
    STRFTIME('%d %M %Y', ts04, '-3 DAYS') AS t4,
    STRFTIME('%d %M %Y', ts05, '-4 DAYS') AS t5
FROM savetimestamps;
SELECT
    name,typeof(ts01),typeof(ts02),typeof(ts03),typeof(ts04),typeof(ts05)
FROM savetimestamps;


这将创建一个具有6列或不同列类型关联性的表(TEXT,NUMERIC(规则5)INTEGER,INTEGER(规则1,因为它包含int),BLOB和REAL)。

最后5列具有当前时间戳的默认值,因此未提供该值会导致SQLite插入当前时间戳。

插入2行,第一行适合要使用的表,即name列中的文本值,其余5列中的时间戳。但是,第二行是用于演示的垃圾数据。

然后运行2个查询,第一个显示存储的数据,还有一些使用strftime函数逐步显示前一天的列。

第二个查询显示列类型。

结果是:-

enter image description here

enter image description here


请注意第二行,一列中的列类型如何不同,因此,根据数据的存储方式,每列/行都有其自己的特定类型。


概述SQLite的数据类型是灵活的,但因此可能会造成混淆,尤其是当您来自静态数据类型背景时。

关于android - 在SQLite数据库浏览器中创建时间戳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52734105/

相关文章:

android - 为什么按下搜索按钮时对话框消失

java - android开机时如何启动activity?

sql - 在SQL中是否需要分号?

android - 如何像这样在android中创建圆角标签?

java - android中简单的递增/递减程序

javascript - 在 Javascript PhoneGap 中一次又一次显示相同的结果

qt - SQLITE 和 SQLITE 之间的混淆

ios - 在 swift 中使用 sqlite 数据库以字符串形式检索数据时,用整数对列进行排序?

android - 这是使用异步任务加载器在列表 fragment 中打开/关闭数据库资源的正确位置

android - 从 SQLite 中获取单个值