你好,我使用的是PostegreSQL,我希望约束一个特定的数字(税号)以遵守以下规则:
X=8*2+7*3+6*4+5*5+4*6+3*7+2*8+1+9
y = x % 11
if (y == 0 || x == 1) z = 0;
else z = 11 - y这在sql中是可能的吗?
发布于 2014-03-24 21:52:07
是的,虽然很麻烦,但还是有可能的。看起来是这样的:
check ((col regexp_matches '^[0-9]{9}$) and
(case when (substring(col, 1, 1) * 9 + substring(col, 2, 1) * 8 + substring(col, 3, 1) * 7 +
substring(col, 4, 1) * 6 + substring(col, 5, 1) * 5 + substring(col, 6, 1) * 4 +
substring(col, 7, 1) * 3 + substring(col, 8, 1) * 2
) % 11 = 0 or
(substring(col, 1, 1) * 9 + substring(col, 2, 1) * 8 + substring(col, 3, 1) * 7 +
substring(col, 4, 1) * 6 + substring(col, 5, 1) * 5 + substring(col, 6, 1) * 4 +
substring(col, 7, 1) * 3 + substring(col, 8, 1) * 2
) = 1
then 0
else 11 -
((substring(col, 1, 1) * 9 + substring(col, 2, 1) * 8 + substring(col, 3, 1) * 7 +
substring(col, 4, 1) * 6 + substring(col, 5, 1) * 5 + substring(col, 6, 1) * 4 +
substring(col, 7, 1) * 3 + substring(col, 8, 1) * 2
) % 11
)
end) = substring(col, 9, 1) + 0
)就我个人而言,我会将它封装在一个函数中,然后使用该函数。
https://stackoverflow.com/questions/22620912
复制相似问题