Oracle数据库通过身份证计算男女数量比例(Java的SSM框架)

在这里我们统一使用的是18位的新身份证,15位的忽略不做判断!
实现功能前,我们需要知道:18位的新身份证,倒数第二位是单数的为男,双数的为女。
知道这个后,我们就可以直接从SQL语句上着手去编写,并不需要从编程语言上写相关逻辑,如果项目还有其他的需求,那我们另说。
我的功能需求就是通过身份证计算男女比例,项目使用SSM框架,Oracle数据库。SQL语句如下:

select 
        count(decode(mod (to_number( substr(t.identity ,17, 1)),2 ),0, '','男' ))as man,
        count(decode(mod (to_number( substr(t.identity ,17, 1)),2 ),0, '女','' ))as woman
        from cmu_userdevice e
        LEFT JOIN cmu_subscriber a ON a.COMMUNITYKEY =e.COMMUNITYKEY
        LEFT JOIN CMU_CUSTOMER t ON t.SUBSCRIBERKEY = a.SUBSCRIBERKEY
        LEFT JOIN CMU_COMMUNITY c ON c.COMMUNITYKEY = a.COMMUNITYKEY
        RIGHT OUTER JOIN 
        (select * from CMU_USERS start with USER_ID = #{userid,jdbcType=VARCHAR} connect by prior USER_ID = PID) f ON e.USER_ID = f.USER_ID 
        WHERE
        <if test="type == 1">
            c.PROVINCEID = #{id, jdbcType=VARCHAR}
        </if> 
        <if test="type == 2">
            c.cityid = #{id, jdbcType=VARCHAR}
        </if>
        <if test="type == 3">
            c.areaid = #{id, jdbcType=VARCHAR}
        </if>
        <if test="type == 4">
            c.ADDRESSID = #{id, jdbcType=VARCHAR}
        </if>
        AND t.identity is NOT NULL

注明:大家只需要看以下两句sql

//t.identity就是存身份证的列,替换成你们数据库的列就OK
        count(decode(mod (to_number( substr(t.identity ,17, 1)),2 ),0, '','男' ))as man,
        count(decode(mod (to_number( substr(t.identity ,17, 1)),2 ),0, '女','' ))as woman

其他的SQL语句是其他的需求和表结构需要这么编写。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Java°遇上鲸鱼

文章帮您解决了问题打赏1元即可

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值