【问题标题】:sybase ISNULL - are the conditions too long?sybase ISNULL - 条件是否太长?
【发布时间】:2012-09-18 22:32:38
【问题描述】:

我正在尝试解开一个非常古老的变量。这是在一个字段中输入的全名,可在两个单独的表中找到。在大多数较新的地方,名称位于三个逻辑列中,第一、中间、最后。在这些中,它们都在一起,我试图将其剥离为第一个首字母,姓氏。我在这里找到以下内容并对其进行了修改:

http://dbaspot.com/sqlserver-programming/365656-find-last-word-string.html

 DECLARE @full_name VARCHAR(20)
 DECLARE @fullname VARCHAR(20)
 SELECT @full_name = REVERSE('John A Test')
 SELECT @fullname = REVERSE('Joe Q Public')

 SELECT @final = ISNULL(
                 (right(@full_name,1) + '.  ' + (REVERSE(SUBSTRING(@full_name, 1, 
                                                   CHARINDEX(' ',@full_name) - 1)))), 

                  (right(@fullname,1) + '.  ' + (REVERSE(SUBSTRING(@fullname, 1, 
                                                   CHARINDEX(' ',@fullname) - 1 ))))
                        )

当我将 full_name 留在那里时,它可以正常工作...返回 J. Test。当我将其设为空时,默认值应为
J. Public,但最终为.。当我分别测试每条线时,它们会起作用。我也尝试了 COALESCE,结果相同。 ISNULL 或 ???? 的括号太多了

【问题讨论】:

  • 我怀疑是因为“条件太长”。这将(或应该)从服务器产生一个很好的解释。
  • 我不这么认为,因为它确实给了我一个答案。只是不是我所期待的。它应该工作......?

标签: sql sybase


【解决方案1】:

right(@full_name,1) + '. ' 有问题,例如:

select null+'.'

给你.

尝试使用case 更改您的代码,如下所示:

 DECLARE @full_name VARCHAR(20)
 DECLARE @fullname VARCHAR(20)
 DECLARE @final VARCHAR(20)
 SELECT @full_name = null--REVERSE('John A Test')
 SELECT @fullname = REVERSE('Joe Q Public')

 SELECT @final = case
                    when @full_name is not null
                       then (right(@full_name,1) + '.  ' + (REVERSE(SUBSTRING(@full_name, 1, 
                                                   CHARINDEX(' ',@full_name) - 1))))
                    else (right(@fullname,1) + '.  ' + (REVERSE(SUBSTRING(@fullname, 1, 
                                                   CHARINDEX(' ',@fullname) - 1 ))))
                 end 
select @final         

【讨论】:

  • 那行得通。谢谢。所以第一个参数不是真正的NULL,因为它有'. ',对吗?它永远没有机会默认第二个参数。我对此进行了测试,它确实显示了第一个中的'. '
  • 是的,没错。这很奇怪,但它是 sybase :),例如在 ms sql server select null+'.' 它是空的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-03-12
  • 2012-10-17
  • 1970-01-01
  • 1970-01-01
  • 2011-03-01
  • 1970-01-01
  • 2017-10-22
相关资源
最近更新 更多