1. 程式人生 > >Oracle資料庫通過身份證計算男女數量比例(Java的SSM框架)

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語句是其他的需求和表結構需要這麼編寫。