【问题标题】:find that log(a)'s value type if a is null on SQL server 2008 R2.如果在 SQL Server 2008 R2 上 a 为空,则查找 log(a) 的值类型。
【发布时间】:2014-08-16 13:18:06
【问题描述】:

我需要在 SQL Server 2008 R2 上找到该 log(null) 的值类型。

DECLARE @factor1 float      
set @factor1 = log(null)
if  @factor1 is null 
    print '@factor1 is '+ cast(@factor1 as varchar(100))
if  isnumeric(@factor1) = 1
    print '@factor1 is num'

为什么 log(null) 没有抛出异常?

谢谢

【问题讨论】:

    标签: sql sql-server sql-server-2008 exception windows-7


    【解决方案1】:

    假设你想要一个 NULL 值的消息,你应该处理 @factor1 的 null 值。

    您不能将字符串与 NULL 连接,它会产生 NULL 。

    DECLARE @factor1 float      
    set @factor1 = log(null)
    if  @factor1 is null 
        print '@factor1 is '+ isnull(cast(@factor1 as varchar(100)),'null')
    if  isnumeric(@factor1) = 1
        print '@factor1 is num'
    

    返回:

    @factor1 为空

    【讨论】:

    • 对null的任何操作一般都是null,但是你可以做DECLARE @factor1 float; set @factor1 = log(null); select @factor1来证明。
    【解决方案2】:

    NULL 不为零。传递给任何标量函数的 NULL 都将返回 NULL。 (异常:UDF 代码当然可以检测到 null 并故意抛出异常。)

    从概念上讲,NULL 表示“我不知道!”。 “我不知道”的对数是我不知道的。我不知道它不存在。

    如果您想要在源值为 NULL 时出现错误,请尝试:

    LOG(COALESCE(NULL,0))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-11
      • 1970-01-01
      • 2011-09-18
      • 1970-01-01
      相关资源
      最近更新 更多