正在尝试将SQL中的空值转换为null
我正在尝试处理一个空白或“”值,以便在执行简单选择时将其更改为NULL,但它不起作用正在尝试将SQL中的空值转换为null,sql,sql-server,tsql,Sql,Sql Server,Tsql,我正在尝试处理一个空白或“”值,以便在执行简单选择时将其更改为NULL,但它不起作用 select distinct case when [Manager]='' then null else [Manager] end as Mgr from Table where [Manager] in ('Abc', 'bas', 'xyz', 'pqr', '') 还有其他方法吗?我想,您还需要使用检查空值,或者[Manager]为空 select distinct case when [
select distinct case when [Manager]='' then null else [Manager] end as Mgr from Table
where [Manager] in ('Abc', 'bas', 'xyz', 'pqr', '')
还有其他方法吗?我想,您还需要使用
检查空值,或者[Manager]为空
select
distinct case when [Manager]='' then null else [Manager] end as Mgr
from Table
where
[Manager] in ('Abc', 'bas', 'xyz', 'pqr', '')
OR [Manager] IS NULL
老实说,有一百万种方法可以做到这一点,有人确实正确地指出where子句中的函数消除了索引的使用
但是在我的查询中发生的事情是,我正在删除字段周围的任何空白(两个trims),然后isnull表示,如果找到null值,则将其设置为“”。我这样做是为了只有一条语句,或者您可以去掉isnull并说“或者[manager]为null”。select是trim manager,如果为空(nullif),则将其设置为null,如果我理解正确,这是预期结果
SELECT
DISTINCT NULLIF(LTRIM(RTRIM([manager])),'') AS Mgr
FROM
Table
WHERE
ISNULL(LTRIM(RTRIM([manager])),'') IN ('Abc','bas','xyz','pqr','')
请显示您得到的结果不正确。可能缺少TRIM()?您的代码按照您的说明执行。我猜您的实际数据中还有其他一些空白字符。其中一个答案的注释是正确的。我们需要复制此问题的DDL和DML。很明显,这不仅仅是我们得到的一点点,让我们继续吧。您没有查询问题。您有一个数据问题。虽然您在此处使用的NULLIF
是正确的,但您可以稍微扩展一下您的答案,以解释为什么您的答案是正确的。老实说,有一百万种方法可以做到这一点,而且确实有人正确地指出where子句中的函数消除了索引的使用。但是现在发生的事情是,我正在删除字段周围的任何空白(两个trims),然后isnull表示,如果您找到null值,则将其设置为“”。我这样做是为了只有一条语句,或者您可以去掉isnull并说“或者[manager]为null”。select表示修剪管理器,如果为空(nullif),则将其设置为null,如果我理解正确,这是预期结果。出于性能原因,为什么不在('Abc'、'bas'、'xyz'、'pqr'、'')中使用,其中ISNULL([manager]),''。如果管理器列上存在任何索引,isnull会使该索引无效。这一点很好。我通过Brent Ozar的博客在dba.stackexchange.com上找到了这个。它有一些关于这个主题的有趣信息: