首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL复数约束

SQL复数约束
EN

Stack Overflow用户
提问于 2014-03-24 21:25:55
回答 1查看 760关注 0票数 1

你好,我使用的是PostegreSQL,我希望约束一个特定的数字(税号)以遵守以下规则:

  • 9位数
  • 最后一个数字(z)是根据以下情况计算的:

X=8*2+7*3+6*4+5*5+4*6+3*7+2*8+1+9

代码语言:javascript
复制
y = x % 11  
if (y == 0 || x == 1) z = 0;
else z = 11 - y

这在sql中是可能的吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-03-24 21:52:07

是的,虽然很麻烦,但还是有可能的。看起来是这样的:

代码语言:javascript
复制
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
    )

就我个人而言,我会将它封装在一个函数中,然后使用该函数。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22620912

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档