2012-01-06 50 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值。