我想检查指定字段的长度是x长度,可用值是数值
我可以通过使用两个单独的case语句来完成此操作,如下所示
(case when len(columnA) = 10 then 0 else 1 end)+
(case when IsNumeric(columnA) = 1 then 0 else 1 end)+
(case when len(columnB) = 8 then 0 else 1 end)+
(case when IsNumeric(columnB) = 1 then 0 else 1 end)
有没有更好的方法,因为我需要超过40列,它们的数据类型是varchar,每列都有特定的长度。
使用一些捷径将上述两个案例陈述减少为一行
答案 0 :(得分:1)
如果您只关心列无效且对失败的标准不太感兴趣,那么您可以将两个条件放入一个case语句中
(case when len(columnA) = 10 and IsNumeric(columnA) = 1 then 0 else 1 end)
关于Sean提出的问题,ISNUMERIC只确认该值可以转换为数值数据类型,因此逗号和句点也是有效的。你可以检查任何不在数字范围内的单个字符
case when len(columnA) = 10 and ColumnA not like '%[^0-9]%' then 0 else 1 end
这有点难看,因为我们不得不说[不在范围内],所以你可能想稍微改变逻辑。