2012-01-06 80 views
2

因此,根据Mycondition的值,FIELD2可以将两组字段作为单个结果连接在一起。TSQL替换为长度约束

我的问题是,只有当Mycondition = 1

如果MyCondition = 1,那么我需要连接INT_FIELD_ONE + 'A' + INT_FIELD_TWO。

串联不是问题。

问题是如果INT_FIELD_ONE(是空)+'A'+ INT_FIELD_TWO(为空),那么我不得不返回任何东西。

如果字段ONE和TWO都为空,则My Replace命令将起作用。但是,如果只有1是NULL而另一个不是“A”会被任何方式删除。如果1字段不为空,则A需要保留。

例如:

NULL + 'A' + NULL =无

NULL + 'A' + XXXX = AXXXX

XXXX + 'A' + NULL = xxxxA

因此,我需要进行TSQL替换,结果长度限制> 1

任何想法?

SELECT XXX, 

CASE --Case Statement to Return Field2 
     WHEN MyCondition = 1 THEN 
     --Constraint on the Replace Starts Here 
     REPLACE(
     Isnull(CAST(INT_FIELD_ONE AS VARCHAR), '') + 'A' + 
     Isnull(CAST(INT_FIELD_TWO AS 
        VARCHAR), '') 
     ,'A','') 
ELSE 
     REPLACE(
     Coalesce(REPLACE(INT_FIELD_THREE, '', '-'), Isnull(INT_FIELD_THREE, '-'), INT_FIELD_THREE) + 
       '/' + Coalesce(REPLACE(INT_FIELD_FOUR, '', '-'), 
         Isnull(INT_FIELD_FOUR, '-'), INT_FIELD_FOUR) + ' ', '-/- ', 
     '') 
END 
AS FIELD2 


FROM TABLEX 

回答

3

这个怎么样?

CASE WHEN MyCondition = 1 AND (INT_FIELD_ONE IS NOT NULL OR INT_FIELD_TWO IS NOT NULL) THEN concat.. 
    WHEN MyCondition = 1 THEN NULL -- at that point we know that both are null 
    ELSE ... END 

注意,现在你不需要替换,当你正在做的CONCAT,因为你肯定知道你的领域之一是不为空

2
… 
WHEN MyCondition = 1 THEN 
    ISNULL(
    NULLIF(
     ISNULL(CAST(int1 AS VARCHAR), '') + 'A' + ISNULL(CAST(int2 AS VARCHAR), ''), 
     'A' 
    ), 
    '' 
) 
… 

当两个int1int2是功能NULL,并置的结果将是A。如果表达式返回ANULLIF()将返回NULL,否则将返回表达式的结果。外部ISNULL()将把NULL转换为空字符串或返回其第一个参数获得的任何非NULL值。