因此,FIELD2可以返回两组字段作为单个结果连接,具体取决于Mycondition的值。
我的问题仅在Mycondition = 1
时出现如果MyCondition = 1,那么我需要连接INT_FIELD_ONE +'A'+ INT_FIELD_TWO。
串联不是问题。
问题是如果INT_FIELD_ONE(为空)+'A'+ INT_FIELD_TWO(为空),那么我必须不返回任何内容。
如果字段ONE和TWO都为空,则我的替换命令将起作用。但是如果只有1是NULL而另一个不是“A”则会被删除。如果1个字段不为空,则A需要保留。
例如:
NULL +'A'+ NULL = Nothing
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
答案 0 :(得分: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时不需要REPLACE函数,因为您确定其中一个字段不为null
答案 1 :(得分:2)
…
WHEN MyCondition = 1 THEN
ISNULL(
NULLIF(
ISNULL(CAST(int1 AS VARCHAR), '') + 'A' + ISNULL(CAST(int2 AS VARCHAR), ''),
'A'
),
''
)
…
当int1
和int2
都为NULL时,连接的结果将为A
。如果表达式返回NULLIF()
,A
将返回NULL,否则它将返回表达式的结果。外部ISNULL()
将NULL转换为空字符串或返回其第一个参数所获得的非NULL值。