表示第一非空场
问题描述:
我创建了以下存储过程返回整数值表列:表示第一非空场
deIntroText,deCompanyText,deTimetableText和deExampleText
,我需要为从SELECT返回的每个记录做到这一点。
于是我意识到我需要创建一个临时列将其存储在,我想你需要使用IF语句是这样的:
IF deIntroText IS NOT Null
THEN TempFieldToReturn = 1
ELSE IF deCompanyText IS NOT Null
THEN TempFieldToReturn = 2
ELSE IF deTimetableText IS NOT Null
THEN TempFieldToReturn = 3
ELSE IF deExampleText IS NOT Null
THEN TempFieldToReturn = 4
所以我的问题是 - 什么是实现这一目标的最佳方式任何例子,将不胜感激。
答
没有真正的捷径 - 只使用一个CASE
表达:
SELECT
/* Other Columns */
CASE
WHEN deIntroText IS NOT Null THEN 1
WHEN deCompanyText IS NOT Null THEN 2
WHEN deTimetableText IS NOT Null THEN 3
WHEN deExampleText IS NOT Null THEN 4
ELSE 5 END as OtherColumn
FROM
/* Rest of query */
这是一个搜索CASE
- 实际上也有CASE
两个变种。如果所有的列都是NULL
,我猜对了5 - 如果你想在这种情况下得到NULL
的结果,你可以离开ELSE 5
部分。
+1
+1如果CHARINDEX或PATINDEX可以通过,ELSE 0也可以作为选项。 – 2012-07-06 11:43:18
为什么不在数据访问层上执行该操作,而不是数据层本身? – abatishchev 2012-07-06 08:04:39