Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.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 ISNULL不替换为NULL_Sql_Sql Server_Sql Server 2008_Isnull - Fatal编程技术网

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相关的函数

  • IsNull,它接受两个参数,一个可能为null的值和一个替换值(如果原始值为null)。IsNull(null,0)=0
  • NullIf,它接受两个参数并比较它们。如果比较返回true,则返回null;如果比较为false或null,则返回th第一个值。NullIf(null,0)为null,NullIf(0,0)为null,NullIf(1,null)=1

  • 看起来你想使用
    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,我已经发布了我的答案。