Sql ISNULL不替换为NULL
我有以下代码-Sql ISNULL不替换为NULL,sql,sql-server,sql-server-2008,isnull,Sql,Sql Server,Sql Server 2008,Isnull,我有以下代码- SELECT BR_CSNO AS [PARTY_KEY], 'W' AS [PHONE_TYPE_CD], ISNULL( LTRIM( RTRIM( FAC_TELNO ) ), '0' ) AS [PHONE_NUM], NULL AS [UPDATE_DT], GETDATE() [BATCH_DT] FROM BASE B 我得到以下结果- 它不会替换NULL。为什么?是
SELECT
BR_CSNO AS [PARTY_KEY],
'W' AS [PHONE_TYPE_CD],
ISNULL( LTRIM( RTRIM( FAC_TELNO ) ), '0' ) AS [PHONE_NUM],
NULL AS [UPDATE_DT],
GETDATE() [BATCH_DT]
FROM
BASE B
我得到以下结果-
它不会替换NULL
。为什么?是因为放置错误还是使用了LTRIM(RTRIM())
编辑
对不起,我对SQL的了解有限。我想修剪
FAC\u TELNO
并将其替换为NULL
,如果它是0
,我想这就是我想要的。抱歉造成混乱
SELECT
BR_CSNO AS [PARTY_KEY],
'W' AS [PHONE_TYPE_CD],
NULLIF( LTRIM( RTRIM( FAC_TELNO ) ), '0' ) AS [PHONE_NUM],
NULL AS [UPDATE_DT],
GETDATE() [BATCH_DT]
FROM
BASE B
为什么使用LTRIm和RTRIM使用TRIM?这对我来说很有用
SELECT
BR_CSNO AS [PARTY_KEY],
'W' AS [PHONE_TYPE_CD],
ISNULL( Trim( FAC_TELNO ), '0' ) AS [PHONE_NUM],
'' AS [UPDATE_DT],
GETDATE() [BATCH_DT]
FROM
BASE B
SQL有两个与null相关的函数
看起来你想使用
NullIf(ltrim(rtrim(fac_telno)),0)Phone_Num
,0
和NULL
之间有区别,你知道吗?我不明白。在什么情况下,您希望替换什么?1) 如果LTRIM(RTRIM(FAC_TELNO))
为NULL
,则FAC_TELNO
也为空,因此在涉及此检查时,微调无效。2) 您正在将NULL
替换为'0'
。您的表不包含NULL
(或者,如果是这样,它确实被'0'
替换了-这意味着它正在按它应该的方式工作。但是,它不能用NULL
替换任何东西,因为这不是你的代码所说的。你希望得到什么输出?@Amadan-好的,谢谢。下面是我需要做的-我想修剪'0',然后用NULL替换它(因为它不是一个有效的电话号码。@Dai SQL Server中没有TRIM
,这看起来是最简洁的解决方案是的!你说得对。我想使用NULLIF,我已经发布了我的答案。