ISNULL不替换为NULL

时间:2015-07-17 00:24:22

标签: 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

我得到以下结果 -

enter image description here

它不会取代NULL。为什么?是因为错误放置还是使用了LTRIM(RTRIM())

修改

很抱歉我对SQL知之甚少。我想修剪FAC_TELNO并将其替换为NULL,如果它是0

3 个答案:

答案 0 :(得分:1)

我认为这就是我想要的。很抱歉造成混乱!

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

答案 1 :(得分:1)

SQL有两个与空值相关的函数。

  1. IsNull,它接受两个参数,一个可能为空的值,如果原始值为null,则为一个替换值。 IsNull(null,0)= 0
  2. NullIf,它接受两个参数并比较它们。如果比较返回true,则返回null,如果比较为false或null,则返回第一个值。 NullIf(null,0)为null,NullIf(0,0)为null,NullIf(1,null)= 1.
  3. 您似乎想要使用NullIf(ltrim(rtrim(fac_telno)), 0) Phone_Num

答案 2 :(得分:0)

为什么使用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