我有一个包含两个字段的表 - ID1 和 ID2
ID1 可以为空,ID2 始终填充。
我想创建一个包含一个字段的视图。该字段将是来自 ID2 的数据,除非 ID1 有一个值,在这种情况下我需要它是 ID1。
Coalesce 对我不起作用,因为 ID1 不为空。
所有的建议都收到了!
我有一个包含两个字段的表 - ID1 和 ID2
ID1 可以为空,ID2 始终填充。
我想创建一个包含一个字段的视图。该字段将是来自 ID2 的数据,除非 ID1 有一个值,在这种情况下我需要它是 ID1。
Coalesce 对我不起作用,因为 ID1 不为空。
所有的建议都收到了!
取决于在这种情况下“空白”的确切含义,但如果空白仅表示空字符串或空格:
如果该列可能包含您仍希望将其视为空白的空格,请从 ID1 中删除空格:
LTRIM(ID1)
然后,NULL
如果它等于空字符串,则可以通过执行以下操作:
NULLIF(TRIM(ID1), '')
然后你可以COALESCE()
像这样使用 ID2 列:
COALESCE(NULLIF(TRIM(ID1), ''), ID2)
如果 ID1 始终是 'something' 或 '' (空字符串),那么您只需要NULLIF(ID1,'')
如果 ID1 = 空字符串将返回 NULL
原始响应,这是愚蠢的,因为它修剪了两次!
'[ID] = COALESCE(NULLIF(LTRIM(RTRIM(ID1)), ''), ID2)'
无论“空白”是什么意思,如果不是NULL
,都可以用一个CASE
条件表示:
CASE WHEN ID1 = 'blank' THEN ID2 ELSE ID1 END
ID1 = 'blank'
你的情况在哪里。
select case when ID1 = '' then ID2 else ID1 end from MyTable;
你可以试试这样的CASE
说法:
SELECT CASE ID1 = '' THEN ID2 ELSE ID1 END CASE FROM ...