Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql WHERE子句将非空字段与null进行比较_Sql - Fatal编程技术网

Sql WHERE子句将非空字段与null进行比较

Sql WHERE子句将非空字段与null进行比较,sql,Sql,我的sql语句在这里面临一个奇怪的问题。也许这是件愚蠢的事,我抓不住 SELECT appointment.patient_id, patient.notes, patient.first_name, CONVERT(VARCHAR(27), appointment.start_time, 100), patient.email_address FROM appointment, patient WHERE Day(ap

我的sql语句在这里面临一个奇怪的问题。也许这是件愚蠢的事,我抓不住

SELECT appointment.patient_id,
       patient.notes,
       patient.first_name,
       CONVERT(VARCHAR(27), appointment.start_time, 100),
       patient.email_address
FROM   appointment,
       patient
WHERE  Day(appointment.start_time) = 06
       AND Month(appointment.start_time) = 06
       AND Year(appointment.start_time) = 2013
       AND appointment.appointment_type_id != ''
       AND appointment.location_id != ''
       AND appointment.patient_id = patient.patient_id
       AND patient.email_address != ''; 
上面的查询返回3条记录。“notes”字段的值在所有3条记录中均为空。
如果我添加标准patient.notes!='1提醒,它不应该返回相同的结果集吗?当我尝试它时,它返回零条记录。有人能解释为什么吗?

不,你的期望是错误的。与NULL的任何比较都被视为false,is NULL除外

所以,病人笔记!='“1提醒”为假,正如patient.notes=“1提醒”为假一样。您可以通过执行以下操作来处理此问题:

coalesce(patient.notes, '') != '1 Reminder'

不,你的期望是错误的。与NULL的任何比较都被视为false,is NULL除外

所以,病人笔记!='“1提醒”为假,正如patient.notes=“1提醒”为假一样。您可以通过执行以下操作来处理此问题:

coalesce(patient.notes, '') != '1 Reminder'


A!=运算符在空值上不会解析为true。要获取除1个提醒之外的记录,包括空值,请使用patient.notes!='1“提醒”或patient.notes为空。

A!=运算符在空值上不会解析为true。要获取除1个提醒之外的记录,包括空值,请使用patient.notes!='1“提醒”或patient.notes为空。

第1步是编写代码或SQL,以便其他人和您自己都可以阅读。现在,比较:选择*从选择空作为x,其中x.a~op~NULL-用=、是和不是替换~op~。结果如何?谢谢你的回复。如果我编写一个类似sql的测试,请选择*from patient where notes!='1分钟,它工作正常。这告诉我语法很好。我说得对吗20多年前,ANSI-92 SQL标准已经停止使用老式的逗号分隔表列表样式!试着用你的问题标题提供信息。谢谢如果您有更好的,请随意重新编辑,但“怪异问题”不能帮助未来的访问者找到我们提供给您的解决方案!第一步是编写代码或SQL,这样别人和你自己都可以阅读。现在,比较:选择*从选择NULL作为x,其中x.a~op~NULL-用=、是和不是替换~op~。结果如何?谢谢你的回复。如果我编写一个类似sql的测试,请选择*from patient where notes!='1分钟,它工作正常。这告诉我语法很好。我说得对吗20多年前,ANSI-92 SQL标准已经停止使用老式的逗号分隔表列表样式!试着用你的问题标题提供信息。谢谢如果您有更好的,请随意重新编辑,但“怪异问题”不能帮助未来的访问者找到我们提供给您的解决方案!谢谢那么我应该如何写这个条件呢?基本上,我想要所有在notes字段中没有“1提醒”的记录。它可以是null或任何其他值。@user2443689。请看答案中的最后一行。非常感谢。成功了。对不起,我以前没看到最后一行。我是新来的。非常感谢您的快速帮助。谢谢。那么我应该如何写这个条件呢?基本上,我想要所有在notes字段中没有“1提醒”的记录。它可以是null或任何其他值。@user2443689。请看答案中的最后一行。非常感谢。成功了。对不起,我以前没看到最后一行。我是新来的。非常感谢您的快速帮助。谢谢。这也奏效了。我还尝试了coalescepatient.notes,!='我建议使用这种方法,因为它可能更便于携带。有些数据库(即Oracle)将空字符串视为NULL。So=在Oracle中为false,但在其他数据库中为true。谢谢。这也奏效了。我还尝试了coalescepatient.notes,!='我建议使用这种方法,因为它可能更便于携带。有些数据库(即Oracle)将空字符串视为NULL。So=在Oracle中为false,但在其他数据库中为true。