Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.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 server ISNULL(int,';';)空字符串返回0,有方法重写吗?_Sql Server - Fatal编程技术网

Sql server ISNULL(int,';';)空字符串返回0,有方法重写吗?

Sql server ISNULL(int,';';)空字符串返回0,有方法重写吗?,sql-server,Sql Server,假设CNumber是3,Card是50,这个查询的显示是3.50.0。问题是我需要找到一种方法来覆盖ISNULL和COALESCE中存在的数据类型优先级和第一个列出的变量限制。我不能让最后一个数字为0,我需要它不显示任何内容。我试过选角,但没用。也许这根本不可能做到 编辑-道歉,第一篇帖子,我去别处看了看 如果ce1.Id不是null,那么如果cerp.cerp是null,我需要传递一个空字符串,所以结果应该是,比如说3.50。但是,由于ISNULL接受第一个传递参数的数据类型(在本例中为int

假设CNumber是3,Card是50,这个查询的显示是3.50.0。问题是我需要找到一种方法来覆盖ISNULL和COALESCE中存在的数据类型优先级和第一个列出的变量限制。我不能让最后一个数字为0,我需要它不显示任何内容。我试过选角,但没用。也许这根本不可能做到

编辑-道歉,第一篇帖子,我去别处看了看


如果ce1.Id不是null,那么如果cerp.cerp是null,我需要传递一个空字符串,所以结果应该是,比如说3.50。但是,由于ISNULL接受第一个传递参数的数据类型(在本例中为int),它将空字符串转换为0,从而生成3.50.0,问题是我不能让它最终成为0,我想我理解了……在互联网的这一边,肯定不是很清楚

CAST(c.CNumber AS VARCHAR(2)) + '.'
            + CAST(cc.Card AS VARCHAR(2)) + '.'
            + CAST(CASE WHEN ce1.Id IS NOT NULL
                   THEN ISNULL(cerp.CERP, ' ')
                   ELSE ISNULL(cpa.Port, ' ')
              END AS VARCHAR(2)) AS [IDPool]

您需要在
ISNULL
函数内部而不是函数外部强制转换参数值,以便函数的结果类型是您想要的类型。此外,如果您不希望在值为null时显示句点,那么也可以在
ISNULL
函数中包含字符串串联,以便它们消失

CAST(c.CNumber AS VARCHAR(2)) + '.'
            + CAST(cc.Card AS VARCHAR(2)) + '.'
            + CAST(CASE WHEN ce1.Id IS NOT NULL
                   THEN ISNULL(convert(varchar(2), cerp.CERP), ' ')
                   ELSE ISNULL(convert(varchar(2), cpa.Port), ' ')
              END AS VARCHAR(2)) AS [IDPool]

嗯,什么?你真正需要的结果是什么?那么你想要
3.5
3.50
3.50.
?我很困惑。即使是一点点清晰的解释也会在这里找到答案。请阅读,这里是一个学习如何提高问题质量和获得更好答案的好地方。如果ce1.Id不是null,那么如果cerp.cerp是null,我需要传递一个空字符串,所以结果应该是,比如说3.50。但由于ISNULL接受第一个传递参数的数据类型(在本例中为int),它会将该空字符串转换为0,从而生成3.50.0。问题是,我不能让它最终成为0。这就是我理解问题的方式。感谢帮助,这就成功了,ISNULL只接受两个参数,所以我甚至没有想到在函数内部连接。对于问题如此不清楚,我深表歉意,再次感谢!没问题;很乐意帮忙!是的,您可以使用表达式作为函数的参数,但不能使用存储过程。欢迎使用SO:)如果您发现某个答案很有用,您可以单击该答案旁边的复选框,将其标记为已接受的答案,让人们知道它对您有帮助。
declare @CNumber as int = 3
declare @Card as int = 50
declare @Id as int
declare @CERP as int
declare @Port as int

select 
    CAST(@CNumber AS VARCHAR(2)) + '.'
        + CAST(@Card AS VARCHAR(2))
        + CASE WHEN @Id IS NOT NULL
               THEN ISNULL('.' + cast(@CERP as varchar(2)), '')
               ELSE ISNULL('.' + cast(@Port as varchar(2)), '')
          END AS [IDPool]