石鑫华视觉 发表于 2020-2-27 12:33:05

LabVIEW SQL条件查询时条件值等于空时无返回数据

LabVIEW SQL条件查询时条件值等于空时无返回数据
今天使用LabVIEW做数据库时,在一个条件查询中,条件为空(或非空),例如是一个字段,真时是T,假时为空,那么要按条件查找所有空的数据,T的不查找。那么按照一般的逻辑就是Select * from 表名 where 字段='';这样的语句。可是在查询中,没有返回相关的数据。

当条件=''空时,无返回数据

条件='F'时有值返回

条件='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 not null方式可行

字段='null'方式不行

字段=null方式不行

PS:
遇到一个尴尬的事。用LabVIEW写入空字符串后,又可以用字段=''的方式查找,用字段 is null的方式却查不到。只能说明,ACESS时的默认的空和LabVIEW写入的空,不是一回事,难道这个空还有编码问题????

上面三格是ACCESS默认的空白下面三格是LabVIEW写入的空白
在MDB数据库中,图中显示上面的三格,是在原有的数据库上添加新的字段后默认的值(即空白,这个是ACCESS的默认空白),这些得使用删除 is null的方式才能查找到,而下面的三格,是用LabVIEW写入的数据库,删除字段使用LabVIEW的字符串并什么也没填(LabVIEW的空白),这时使用删除 is null查找不到,但是用删除=''可以查找到:

删除=''仅三行数据即LabVIEW写入的数据

删除 is null有两千多行,是Access默认的数据

所以这里面还有些问题存在,如果是后期增加的字段,又没有对历史数据进行重新赋值,那么就需要使用一下or,类似于where 删除 is null or 删除='';这样的条件限制,才可以查找到所有的空白。如果是对字段用LabVIEW重新写入一次空白或其它字符,则可以用LabVIEW中的字段=''方式。但是labview写入数据后,应该是不能写入默认的access的空白的,所以对于access默认的空白,一定是要做一下处理才可以的。对于新的数据库,还没数据时,一条条写入,因为就一直是LabVIEW的空白,也就不会存在这样的问题。
页: [1]
查看完整版本: LabVIEW SQL条件查询时条件值等于空时无返回数据

LabVIEW HALCON图像处理入门教程(第二版)
石鑫华机器视觉与LabVIEW Vision图像处理PDF+视频教程11种全套
《LabVIEW Vision函数实例详解》教程-NI Vision所有函数使用方法介绍,基于NI VISION2020,兼容VDM21/22/23