sqlite 的比较等运算是根据不同的值而不同的,并不是根据的字段类型,因为 sqlite 是弱类型字段

Posted 朝闻道

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sqlite 的比较等运算是根据不同的值而不同的,并不是根据的字段类型,因为 sqlite 是弱类型字段相关的知识,希望对你有一定的参考价值。

sqlite 的比较等运算是根据不同的值而不同的,并不是根据的字段类型,因为 sqlite 是弱类型字段
 
--------------------------------------------------
http://www.sqlite.com.cn/mysqlite/5/127.html
 
在SQLite3.0版中,值被定义为什么类型只和值自身有关,和列没有关系,和变量也没有关系. (这有时被称作 弱类型.)所有其它的我们所使用的数据库引擎都受静态类型系统的限制,其中的所有值的类是由其所属列的属性决定的,而和值无关.
 
为了最大限度的增加SQLite数据库和其他数据库的兼容性,SQLite支持列的"类型亲和性". 列的亲和性是为该列所存储的数据建议一个类型.我们要注意是建议而不是强迫.在理论上来讲,任何列依然是可以存储任何类型的数据的. 只是针对某些列,如果给建议类型的话,数据库将按所建议的类型存储.这个被优先使用的数据类型则被称为"亲和类型". 
 
--------------------------------------------------
When grouping values with the 当用GROUP BY子句给值分组时,具有不同存储类型的值被认为是不同的, 但也有例外, 比如,一个整数值和一个实数值从数字角度来说是相等的,那么它们则是相等的.用GROUP by 子句比较完后,值不具有任何亲和性.
 
--------------------------------------------------
要特别注意的是 sqlite 文档讲解到的
 
BLOB文本是以“x”或“X”开头的含有十六进制文本信息的文本值。例如:
 
    X\'53514697465\'
 
"
BLOB literals are string literals containing hexadecimal data and preceded by a single "x" or "X" character. For example:
 
    X\'53514C697465\'
 
"
 
这里写入的是二进制内容, 这样写入的字符串是不能用 "=" 选择出来的,例如
 
insert into appzfdata(id) values(x\'3131\')
insert into appzfdata(id) values(\'11\')
 
如果用语句选择
 
select * from appzfdata where id = \'11\' 是选择不出来第一条的(不论创建表时 id 用什么类型的字段).但是你用管理工具软件去看去发现两条记录的 id 值都是 "11" 如果不明就里,你一定会非常抓狂.我觉得这是个非常严重的问题,我怎么知道里面存的是什么类型的数据? 
 
用 like 代替 "=" 号则可以取出来.
 
/*
select length(id),x\'31\'  t,* from appzfdata  --where id like "1"

--and t = x\'31\'

where id = x\'313100\' or id = \'11\'
 
--select (\'aaa\' ||id) ||\'aaa\', * from appzfprice where [appname] like\'i1\'
 
select length ( appname ), * from appzfprice where [appname] like \'i1\'
 
*/

select * from t2 where id = \'1\'

 

http://www.cnblogs.com/-clq/p/3326407.html

以上是关于sqlite 的比较等运算是根据不同的值而不同的,并不是根据的字段类型,因为 sqlite 是弱类型字段的主要内容,如果未能解决你的问题,请参考以下文章

基本数据类型

为什么我在python中的sklearn中使用管道获取不同的值而没有管道

==与===

如何从 Treeview / Tkinter (SQLite) 中的不同表中获取不同的值?

C++ 运算符

从 SQLITE 中的两列中选择不同的值