Oracle資料庫通過身份證計算男女數量比例(Java的SSM框架)
阿新 • • 發佈:2018-12-08
在這裡我們統一使用的是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語句是其他的需求和表結構需要這麼編寫。