Sqlite数据库中的数据类型及字符串比较

来源:互联网 发布:2017有哪些网络剧上映 编辑:程序博客网 时间:2024/05/22 07:01

在Sqlite中,存储类型(区分存储类型和数据类型)有以下几种数据类型:

  • NULL,值是NULL
  • INTEGER,值是有符号整形,根据值的大小以1,2,3,4,6或8字节存放
  • REAL,值是浮点型值,以8字节IEEE浮点数存放
  • TEXT,值是文本字符串,使用数据库编码(UTF-8,UTF-16BE或者UTF-16LE)存放
  • BLOB,只是一个数据块,完全按照输入存放(即没有准换)

而在Sqlite的使用中,我们常获取当前时间的毫秒数作为时间戳存入数据库中。由于获取到的时间戳数据为长整型(Long)无法直接存入Sqlite中。所以我们经常将其转换成文本(TEXT)存入进数据库。

我们在查询数据的时候经常需要对时间进行比较。所以出现一个问题——在Sqlite中如何比较字符串?如何比较两个被存储成字符串的数据?

1.比较字符串相等的话可以直接使用“=”来进行匹配。

SELECT * FROM Test WHERE time = '1';

2.如果比较字符串的大小的话。我们需要使用”<” 或者”>”来进行比较。

我们通过一个例子来说明:

数据库中的数据如图所示:
数据

当查询

select * from test where time > '2'

则数据库返回的数据为:

这里写图片描述

当查询

select * from test where time > '20'

则数据库返回的数据为:
这里写图片描述

字符串匹配规则:
Sqlite会首先从左边第一个字符开始匹配。
1. 当两个字符串的第一个字符不相等,则输出匹配结果;当第一个字符相等的时候,则向下一位进行匹配。
2. 当两个字符串在此次字符匹配的过程中均存在带匹配的字符(这一位的字符存在),则重复步骤一;否则输出此次匹配字符存在的那个字符串。

以下引用Sqlite官方文档中关于比较表达式的排序规则:

Comparison Expressions

比较表达式

SQLite version 3 has the usual set of SQL comparison operators including “=”, “==”, “<”, “<=”, “>”, “>=”, “!=”, “<>”, “IN”, “NOT IN”, “BETWEEN”, “IS”, and “IS NOT”, .
同标准SQL一样,SQLite 3支持如下的比较操作符:”=”, “==”, “<”, “<=”, “>”, “>=”, “!=”, “<>”, “IN”, “NOT IN”, “BETWEEN”, “IS”, 以及 “IS NOT”。

3.1 Sort Order
排序规则

The results of a comparison depend on the storage classes of the operands, according to the following rules:
比较的结果与操作数的存储类型有关,同时依据以下的规则:

A value with storage class NULL is considered less than any other value (including another value with storage class NULL).
NULL值小于其他任何值(包括另外一个NULL)

An INTEGER or REAL value is less than any TEXT or BLOB value. When an INTEGER or REAL is compared to another INTEGER or REAL, a numerical comparison is performed.
INTEGER或REAL小于TEXT,BLOB值;若两个INTEGER(或者REAL)比较,则按照实际的数值进行。

A TEXT value is less than a BLOB value. When two TEXT values are compared an appropriate collating sequence is used to determine the result.
TEXT小于BLOB,若两个TEXT比较,结果则由适当的整理顺序决定

When two BLOB values are compared, the result is determined using memcmp().
若两个BLOD比较,与memcmp()的结果一致


Reference

关于sqlite的数据类型的存储和更为详细的比较规则,可以参考SQLite剖析(4):数据类型(列的亲和类型、比较表达式)。

关于SQLite对于时间类型的处理请戳sqlite数据类型 datetime处理,原文请戳SQL As Understood By SQLite。

关于SQLite数据类型原文请戳Datatypes In SQLite Version 3,翻译请戳SQLite3的数据类型。

更多sqlite的文档材料请移步到Sqlite官网进行查阅。

0 0
原创粉丝点击