注册登陆后可查看附件和大图,以及购买相关内容
您需要 登录 才可以下载或查看,没有账号?注册会员
x
LabVIEW SQL条件查询时条件值等于空时无返回数据
今天使用LabVIEW做数据库时,在一个条件查询中,条件为空(或非空),例如是一个字段,真时是T,假时为空,那么要按条件查找所有空的数据,T的不查找。那么按照一般的逻辑就是Select * from 表名 where 字段='';这样的语句。可是在查询中,没有返回相关的数据。
条件等于空时无返回数据
当条件=''空时,无返回数据
条件等于F时
条件='F'时有值返回
条件等于T时
条件='T'时也有值返回
后来上网查找相关知识点,发现在SQL中逻辑表达式的可能值包括TRUE、FALSE和UNKNOWN,它们被称之为三值逻辑。而在其它的语言中,逻辑表达式只有两种,要么是true,要么就是false。而sql中却存在第三个逻辑表达式UnKnown,这个是sql中特有的。从字面意思上我们可以解理该值的意思是:什么都不知道,就是什么都不是。一般情况下我们将任何值(包括NULL本身)与NULL做比较的时候,都会返回UnKnown。而在查询表达式中(比如where与having中),UnKnown会视为false。所以我们就明白了为什么select * from 表 where 字段=''查不到正确的结果的原因了。也就是在这里,如果是='',那么也就意味着,有两种情况出现,一种是null,另一种是unknown,所以这里是不能这样直接用条件=''的方式来做条件的。
解决方法:
一、对条件字段,每个都写T或F来做逻辑判断,这样就可以用条件='T'或条件='F'来做判断条件。
二、使用select * from 表名 where 字段 is null;的语句来查询,这里的意思就是直接判断字段是null值。或者是where 字段 is not null;的方式来查找非空字段。有些人说可以直接使用字段=null的方式来判断,但是我这里使用Access的mdb数据库,无法实现这种条件判断方式,只能使用is null或is not null的方式来判断:
is null
is null方式可行
is not null
is not null方式可行
字段='null'
字段='null'方式不行
字段=null
字段=null方式不行
PS:
遇到一个尴尬的事。用LabVIEW写入空字符串后,又可以用字段=''的方式查找,用字段 is null的方式却查不到。只能说明,ACESS时的默认的空和LabVIEW写入的空,不是一回事,难道这个空还有编码问题????
上面三格是ACCESS默认的空白下面三格是LabVIEW写入的空白
上面三格是ACCESS默认的空白下面三格是LabVIEW写入的空白
在MDB数据库中,图中显示上面的三格,是在原有的数据库上添加新的字段后默认的值(即空白,这个是ACCESS的默认空白),这些得使用删除 is null的方式才能查找到,而下面的三格,是用LabVIEW写入的数据库,删除字段使用LabVIEW的字符串并什么也没填(LabVIEW的空白),这时使用删除 is null查找不到,但是用删除=''可以查找到:
删除=''仅三行数据即LabVIEW写入的数据
删除=''仅三行数据即LabVIEW写入的数据
删除 is null有两千多行,是Access默认的空白
删除 is null有两千多行,是Access默认的数据
所以这里面还有些问题存在,如果是后期增加的字段,又没有对历史数据进行重新赋值,那么就需要使用一下or,类似于where 删除 is null or 删除='';这样的条件限制,才可以查找到所有的空白。如果是对字段用LabVIEW重新写入一次空白或其它字符,则可以用LabVIEW中的字段=''方式。但是labview写入数据后,应该是不能写入默认的access的空白的,所以对于access默认的空白,一定是要做一下处理才可以的。对于新的数据库,还没数据时,一条条写入,因为就一直是LabVIEW的空白,也就不会存在这样的问题。
|