sql 在 table 中记录验证
sql records validation in a table
我想检查指定字段的长度是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 并且每一列都有特定的长度,我需要这种方法是否有更好的方法。
使用一些快捷方式将以上两个 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
有点难看,因为我们不得不说不[不在范围内],所以你可能想稍微改变一下逻辑。
我想检查指定字段的长度是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 并且每一列都有特定的长度,我需要这种方法是否有更好的方法。
使用一些快捷方式将以上两个 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
有点难看,因为我们不得不说不[不在范围内],所以你可能想稍微改变一下逻辑。