RT!
表tb1,
设计
-----------------------------
id,int(10)
logtime,varchar(200)
-----------------------------
记录一条
----------------------------
12,
2009-10.5-29
-----------------------------======================
现在要做的,将id=12的这一个记录中的10.5替换成为11,如何实现啊?
另外其他的还有一些的记录是这样的,2009-11.5-02
也要将这样的替换成为2009-12-02,以为当时的一个人设计数据库的时候竟然将字段设置为了varchar类型了,现在数据库中已经有上百条的记录了,如何才可以让这个自动修改为int(10)类型,这样最好。将时间修改为UNIX_TIMESTAMP()类型,高人请帮忙啊。

解决方案 »

  1.   

    给你一个示例:
    SELECT 
    MID(ss,INSTR(ss,'-')+1,LENGTH(ss)-INSTR(REVERSE(ss),'-')-5) AS dd FROM (
    SELECT '2009-10.5-29' AS ss) a
    其它的应该知道吧
      

  2.   

    mysql> set @x='2009-10.5-29';
    Query OK, 0 rows affected (0.00 sec)mysql>
    mysql> select concat(SUBSTRING_INDEX(@x,'-',1) ,'-',
        ->  CEILING(SUBSTRING_INDEX(SUBSTRING_INDEX(@x,'-',2),'-',-1)) ,'-',
        ->  SUBSTRING_INDEX(@x,'-',-1)) as newCharDate;
    +-------------+
    | newCharDate |
    +-------------+
    | 2009-11-29  |
    +-------------+
    1 row in set (0.00 sec)mysql>
      

  3.   


    上百条并不算多,哪怕导出来用EXCEL改好再UPDATE回去也很快。利用上面的方法update tb1 set logtime=concat(SUBSTRING_INDEX(logtime,'-',1) ,'-',
    CEILING(SUBSTRING_INDEX(SUBSTRING_INDEX(logtime,'-',2),'-',-1)) ,'-',
    SUBSTRING_INDEX(logtime,'-',-1)) ;