Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.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
在T-SQL中,是否<&燃气轮机'';是指数据以外的不等于问号的东西吗?_Sql_Sql Server_Tsql - Fatal编程技术网

在T-SQL中,是否<&燃气轮机'';是指数据以外的不等于问号的东西吗?

在T-SQL中,是否<&燃气轮机'';是指数据以外的不等于问号的东西吗?,sql,sql-server,tsql,Sql,Sql Server,Tsql,我一直在排除一个查询中的记录,其中许多文本字段只包含一个问号。我的代码是这样结束的: AND Address1 <> '?' AND Address2 <> '?' AND Address3 <> '?' 和地址1'?' 地址是2'?' 地址是3'?' 不幸的是,许多其他记录(在上面的地址字段中有空值)也被排除在外——我实际上需要这些记录。我拿出了Addres2和AddRes3,得到了比我想象中需要的更多的记录,但它现在起作用了。 因此,我的问题是:“?”

我一直在排除一个查询中的记录,其中许多文本字段只包含一个问号。我的代码是这样结束的:

AND Address1 <> '?'
AND Address2 <> '?'
AND Address3 <> '?'
和地址1'?'
地址是2'?'
地址是3'?'
不幸的是,许多其他记录(在上面的地址字段中有空值)也被排除在外——我实际上需要这些记录。我拿出了Addres2和AddRes3,得到了比我想象中需要的更多的记录,但它现在起作用了。
因此,我的问题是:“?”部分是否表示T-SQL中的任何其他部分?

您认为
表示“不等于”是正确的。您遗漏的是
NULL
不等于任何值,也不等于任何值(甚至不等于其他
NULL
值)。与
NULL
的任何相等比较实际上都计算为“未知”,这与True或False都不相同

NULL = '?' -- evaluates to Unknown
NULL <> '?' -- evaluates to Unknown
NULL = NULL -- evaluates to Unknown
NULL <> NULL -- evaluates to Unknown

您认为
表示“不等于”是正确的。您遗漏的是
NULL
不等于任何值,也不等于任何值(甚至不等于其他
NULL
值)。与
NULL
的任何相等比较实际上都计算为“未知”,这与True或False都不相同

NULL = '?' -- evaluates to Unknown
NULL <> '?' -- evaluates to Unknown
NULL = NULL -- evaluates to Unknown
NULL <> NULL -- evaluates to Unknown
表示“不等于不”,因此类似于
'abc''def'
的值将计算为
TRUE
。但是,对于
NULL
,不能使用布尔运算符。使用带有
NULL
的布尔运算符返回结果
NULL
(实际上是未知的),该结果不是真的;(显而易见)一个从句只有在它是真的时候才是真的。因此,其结果类似于
'abc'NULL
=
NULL!=正确
;这意味着未满足
中的
条款要求

要处理
NULL
您需要使用
IS NULL
IS NOT NULL
运算符。因此,对于SQL,您需要:

AND (Address1 <> '?' OR Address1 IS NULL)
AND (Address2 <> '?' OR Address2 IS NULL)
AND (Address3 <> '?' OR Address3 IS NULL)
AND(地址1'?'或地址1为空)
AND(地址2'?'或地址2为空)
和(地址3'?'或地址3为空)
(假设希望返回
NULL
的行)

正如Sean所评论的,您可以使用
ISNULL
COALESCE
函数(即
ISNULL(Address1,“)”?“
)来包装
Address1
等列,但是,我建议不要这样做。在
中使用这些函数会使您的查询变得不可搜索,并可能对查询的性能产生(严重)影响。

意味着“不等于不”,因此类似于
'abc''def'
的内容将评估为
TRUE
。但是,对于
NULL
,不能使用布尔运算符。使用带有
NULL
的布尔运算符返回结果
NULL
(实际上是未知的),该结果不是真的;(显而易见)一个从句只有在它是真的时候才是真的。因此,其结果类似于
'abc'NULL
=
NULL!=正确
;这意味着未满足
中的
条款要求

要处理
NULL
您需要使用
IS NULL
IS NOT NULL
运算符。因此,对于SQL,您需要:

AND (Address1 <> '?' OR Address1 IS NULL)
AND (Address2 <> '?' OR Address2 IS NULL)
AND (Address3 <> '?' OR Address3 IS NULL)
AND(地址1'?'或地址1为空)
AND(地址2'?'或地址2为空)
和(地址3'?'或地址3为空)
(假设希望返回
NULL
的行)


正如Sean所评论的,您可以使用
ISNULL
COALESCE
函数(即
ISNULL(Address1,“)”?“
)来包装
Address1
等列,但是,我建议不要这样做。在
中使用这些函数会使您的查询变得不可搜索,并且可能会对查询的性能产生(严重)影响。

这是因为没有任何东西会等于NULL。那么零?计算结果为NULL。因此,如果要包含NULL,则必须使用coalesce(Address1),“)”?“不幸的是,SQL server处理NULL的方式不同,因为它们不是值,因此无法将它们与值进行比较,根据文档,它们通常被视为未知。@MichelHanna-定义此行为的不是SQL server,这是SQL标准本身。你在哪里找到这段代码的?具体来说,它是否在SSIS包中?@MatBailie是的,我在这里的意思是引擎以这种方式处理它,但并不意味着确定定义标准。也很高兴提到这一点,谢谢你的澄清。那是因为任何东西都不等于NULL。那么零?计算结果为NULL。因此,如果要包含NULL,则必须使用coalesce(Address1),“)”?“不幸的是,SQL server处理NULL的方式不同,因为它们不是值,因此无法将它们与值进行比较,根据文档,它们通常被视为未知。@MichelHanna-定义此行为的不是SQL server,这是SQL标准本身。你在哪里找到这段代码的?具体来说,它是否在SSIS包中?@MatBailie是的,我在这里的意思是引擎以这种方式处理它,但并不意味着确定定义标准。很高兴提到这一点,感谢您的澄清。我的理解是,此类涉及NULL的操作不会计算为某些“未知”概念,而是计算为NULL。(同样的结果,但不需要引入“未知”),引入“未知”是很重要的,因为在大多数编程语言中,如C、C++、C等,“NULL”是一个值,通常为零,可以进行相等的测试。SQL中的概念是“NULL”表示“未知”。。。如果你在一个盒子里有未知的东西,而在另一个盒子里有未知的东西,你就无法知道它们是相等的。甚至不平等。你不知道。这就是重点。这有助于您正确地思考SQL NULL。让我们添加一些文档,说明我的理解是,涉及NULL的此类操作的计算结果不是“未知”概念,而是NULL