CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  PowerBuilder >  DataWindow

这个问题要是给我解决了给钱都行,要不我就要被开除了,真的,各位实在帮帮忙!

楼主cgcfjxyjxy(c)2004-08-02 17:39:31 在 PowerBuilder / DataWindow 提问

我们单位用的数据库是oracle7.3  
  在职工基本信息表(ac01_t)中有身份证号码字段,当然身份证号码字段有的人是15位,有的人的身份证是18位,但从身份证号码中可以知道此人的出生日期,以及性别信息:  
  比如:这个身份证号码:210522741005001,可以得知此人的出生日期:1974-10-05  
              性别是(即身份证号码最后一位,奇数为男,偶数为女)男  
  如果是18位的身份证号:比如:210522196912060527,可以得知此人的  
  出生日期是:1969-12-06日,性别是(身份证号码的倒数第2位,即2)因为是偶数,所以是女;  
   
  读到这儿请不要急,还没到正题:  
   
  我的oracle数据库中的出生日期的字段类型是data型,即1960-10-06这样,而身份证号码字段是字符型:  
   
  我要实现根据身份证号码,用update语句批量更新出生日期和性别字段,当然首先要判断身份证号码的位数,然后.......  
  这个update语句该怎样写,谁能写出详细代码,有注释更好!  
   
  我将万分感谢!!  
   
   
   
  问题点数:100、回复次数:20Top

1 楼SilverSands(洞庭浪子)回复于 2004-08-02 17:50:54 得分 0

晕,你光顾的说了!  
  要怎么更新啊??Top

2 楼wxhacker(为了。。。)回复于 2004-08-02 17:57:52 得分 0

/////函数名   ~~~~~  
  参数   string   ls_cardid  
   
  if   isblank(ls_cardid)   then   return   ''  
   
  if   len(ls_cardid)<>15   and   len(ls_cardid)<>18   then    
  return   '身份证号必须是15或者18位'  
  end   if  
   
  if   len(ls_cardid)=15   then    
  if   mod(integer(right(ls_cardid,1)),2)=1   then  
  return   '男'  
  else  
  return   '女'  
  end   if  
  end   if  
   
  if   len(ls_cardid)=18   then    
  if   mod(integer(mid(ls_cardid,17,1)),2)=1   then  
  return   '男'  
  else  
  return   '女'  
  end   if  
  end   if  
   
   
  update     ...  
   
  循环调用改函数,得到所有人的性别  
   
   
  Top

3 楼liubocy(天道酬勤)回复于 2004-08-02 17:58:52 得分 0

简单啊,判断位数  
  15位的:  
  日期=mid(身份证号,7,6),得到的诸如'741005',再转成'1974-10-05'格式,  
  然后再用date()函数转类型。  
  性别也是用mid()函数取值。  
  别的位数的也差不多这么取,最后再update  
  Top

4 楼cgcfjxyjxy(c)回复于 2004-08-02 21:14:25 得分 0

同志们,我想用一条update语句写出我上面的要求,我要在sql/plus里能执行的.Top

5 楼Blue_Sea_2001(蓝色大海)回复于 2004-08-03 07:31:08 得分 0

sqlserver  
   
  /*create   table   biao  
  (id   int   IDENTITY(1,1)   primary   key,    
  shengfenzheng   varchar(18),  
  chushengriqi   datetime   )  
  insert   into   biao   (shengfenzheng)   values   ('362502770204204')  
  insert   into   biao   (shengfenzheng)   values   ('362502197702042041')  
  */  
  update   biao   set   chushengriqi   =   case   when   len(shengfenzheng)   =   15   then   convert(datetime,substring(shengfenzheng,7,6),12)  
                                                                        else   convert(datetime,substring(shengfenzheng,7,8),112)    
    end  
   
  select   *   from   biaoTop

6 楼jackxrh()回复于 2004-08-03 09:18:21 得分 0

update   table  
  set         出生   =   decode(.......),  
                性别   =   decode(.......)  
   
  忘记了   oracle   里的具体语法   ,你用上面的思路构建一下Top

7 楼liubocy(天道酬勤)回复于 2004-08-03 09:26:36 得分 0

还是建个存储过程吧Top

8 楼akeewww(akeewww)回复于 2004-08-03 09:31:44 得分 0

关键是Oracle的转换函数Top

9 楼yanudd((明明)(http://www.comejava.com)(中国java联盟))回复于 2004-08-03 09:37:29 得分 0

同意"Blue_Sea_2001(蓝色大海)   "的说法,  
  呵呵,虽然一个小裤衩,却是个高手,呵呵  
  Top

10 楼benjaminz(RockDJ)回复于 2004-08-03 10:24:21 得分 0

学习oracle的方法Top

11 楼freedom2001(天翔)回复于 2004-08-03 11:16:17 得分 0

真受不了,人家明明问的是ORACLE,你却给列出个SQL   SERVER的,差别大了去了。至于楼主的问题,我认为你只要花半天的时间好好看看书就搞定了。如果这都搞不定,说句不好听的,你被开掉的机会太大了Top

12 楼wxq1142(游虾)回复于 2004-08-03 11:17:49 得分 0

gz蓝色大海Top

13 楼visking(JYF)回复于 2004-08-03 13:43:42 得分 0

保险起见还是建个过程比较好.如果对oralce的sql不熟悉的话还是不要直接用sql写.o9i里面倒是有类似蓝色海洋这种写法的.o8i里面估计没有.还是写过程吧,化繁为简,一步一步来好了  
   
   
  Top

14 楼sun1976(嫁给我,你就是我的一妾)回复于 2004-08-03 14:19:06 得分 0

真的给钱吗?我交给你,不多要,人民币1分钱就可以了,请存入中国工商银行的这个帐号:  
  9558800200126214614   王艳民   或者  
  农业银行:9559980014204137815   王艳民  
  就是看看你的诚意  
  如果你把钱存进去了,我保证帮你完成任务,直接给你发源代码都行  
   
   
  现在先给你个提示:使用decode和length结合Top

15 楼sun1976(嫁给我,你就是我的一妾)回复于 2004-08-03 14:20:44 得分 0

再提醒一个:decode可以嵌套使用Top

16 楼dragoner()回复于 2004-08-03 17:28:57 得分 0

这一个很简单号Top

17 楼feeling_68(随风)回复于 2004-08-03 17:36:59 得分 0

同意sun1976(关羽观雨)Top

18 楼cuilk(clk)回复于 2004-08-03 20:21:50 得分 80

update   ry_jbxx   a   set   (a.csrq,a.xb)=(select   decode(length(sfzhm),18,to_date(substr(sfzhm,7,8),'YYYY-MM-DD'),  
  15,to_date('19'||substr(sfzhm,7,6),'YYYY-MM-DD')),decode(length(sfzhm),18,substr(sfzhm,length(sfzhm)-1,1),  
  15,substr(sfzhm,length(sfzhm),1))   from   ry_jbxx     where   a.sfzhm=sfzhm)  
   
  表名:ry_jbxx 列名:sfzhm为身份证号码 csrq为出生日期  
   xb为性别  
   
  Top

19 楼sywen(古道西风)回复于 2004-08-04 11:30:18 得分 20

 
  update   ac01_t    
  set出生日期=   to_date(decode(length(身份證號),15,'19'||substr(身份證號,7,6),  
                substr(身份證號,7,8)),'yyyymmdd')   ,  
            性別=decode(mod(to_number(decode(length(身份證號),15,substr(身份證號,15,1),  
                substr(身份證號,18,1))),   2),1,'男','女')  
  where   card_id=身份證號;Top

20 楼wscft(努力工作,开心生活!))回复于 2004-08-05 09:43:36 得分 0

说句实在话,   这个问题一般般,   楼主这个问题要是解决不了的话,被开除也是正常的!Top

相关问题

  • 高手请进?给钱都行啊.?
  • 各位高手求救。。。。。不用高手都行。。。。。
  • 请问:一个2手的TNT2 M64得多钱? 16.32M都行
  • 这个问题谁给解决了,给钱都行,真的!!!
  • 建站高手请进入,真的解决后给钱都行!!
  • 求求各位大侠了,进来看看吧,问题解决以后,让我请客都行。
  • 各位谁有提供下载3d模型的网站?什么格式的都行
  • 请各位大侠帮忙,那伟大下有sybase系统,各种平台下的都行
  • 有谁能提供DICOM3.0标准的中文版,给分给钱都行!!!急!
  • 有谁能提供DICOM3.0标准的中文版,给分给钱都行!

关键词

  • 字段
  • 函数
  • 语句
  • 位数
  • date
  • sfzhm
  • shengfenzheng
  • cardid
  • 身份证号码
  • 出生日期

得分解答快速导航

  • 帖主:cgcfjxyjxy
  • cuilk
  • sywen

相关链接

  • PowerBuilder类图书
  • PowerBuilder类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo