sql server数据库中有一varchar字段。现要将字段类型修改成datetime类型,由于其中有不规范数据。请问如何转换。同时要将类似20021010的日期转换成2002-10-10,类似2001412转换成2001-4-12或2001-04-12。不规范的可以转换成任一datetime
如:2002-10-12

解决方案 »

  1.   

    大哥,没这么简单吧,有些值是不规范的。如:kdkf.2/,1998.10.20,1998-2-42....
      

  2.   

    入参不是date类型?
    说清楚。
      

  3.   

    我的最终目的是要把varchar类型修改成datetime。由于有不规范数据所以没法修改。
    帮帮忙
      

  4.   

    是这样的:varchar字段的值中有些是不规范的数据:/kdk.22,20010267...
    现在要把这些不规范的数据清理或是改成一个正确的日期数据:如2002-12-12,
    原有的一些数据如类似:20021212,1999421,20030409的数据改成2002-12-12,1999-4-21,2003-4-9。当所有的值都规范成yyyy-m-d后就可在数据库中将varchar修改成datetime类型了。
    我现在要的是如何规范这些数据并尽可能保留格式正确的数据
      

  5.   

    我并不想一次性修改,如果要逐行改,如何作判断。如果不是datetime格式则修改。
    程序如何实现。(delphi)
      

  6.   

    先把不规则的数据删除了。
    写个程序吧。。你的varchar字段中包含多少个有效日期性的数据。
    如果多了就有点烦。
      

  7.   

    写小程序先把数据修改成规则的日期字符串。
    可以用formatdatetime('yyyy-mm-dd',date)等来处理。
      

  8.   

    function g(s:string):string;
     begin
       result:=copy(s,1,4)+'-'+copy(s,5,2)+'-'+copy(s,7,2);
     end;
      

  9.   

    如果系统的时间格式不是'xxxx-xx-xx'型号的,那就要获取系统的时间格式,
    function g(s:string):string;
    var :string;
     begin
      Mark:=DateSeparator;
      result:=copy(s,1,4)+Mark+copy(s,5,2)+Mark+copy(s,7,2);
     end;
      

  10.   

    这样呀,那就在我的上一步后再作判断:
    try
       strtodate(g('20020202'));
    except
      删除;
    end;
      

  11.   

    我给你个建议:
    1、先把不规则的值分类,比如:yyyy/mm/dd,yy/mm/dd等分为几类,当然如果还有一些非常特殊的就另外取出特殊处理;
    2、把所以这些类分别转换成一种形式;通过SQL就可以了,Update;
    3、处理特殊数据,手工来修改,修改为2的形式;
    4、最后对统一的形式的值处理就没有难度了吧!