在一个表中一个字段的类型原来是varchar型的,现在因为需要要将他变成datetime型的,但是昨天作了一下测试,发现直接更改类型后会报错,并且转换完后插入值会变得不可预期,比如如果原来值是空的时侯,现在变成了1900-1-1,如果我插入的数据是:10 22 2006  9:13AM这种样式,结果插入后变成了:
2006-10-21 17:19:00.000,但是类型现在必须要改,请高手帮看一下有什么好的解决办法!

解决方案 »

  1.   

    如果原来值是空的时侯,现在变成了1900-1-1是正常的,SQL默认的开始时间
      

  2.   

    如果数据类型是 datetime 结果插入后变成了:
    2006-10-21 17:19:00.000 是正常的
      

  3.   

    13 或 113 (*) 你插入的这个类型
    欧洲默认值 + 毫秒(看一下你的系统默认的时区)
    select convert(varchar(23),getdate(),13)                                                 
    -------------------------------------------------- 
    22 10 2006 09:23:32:250(所影响的行数为 1 行)
      

  4.   

    select convert(varchar(24),getdate(),121)
                             
    ------------------------ 
    2006-10-22 09:26:43.810(所影响的行数为 1 行)
      

  5.   

    比如如果原来值是空的时侯,现在变成了1900-1-1,如果我插入的数据是:10 22 2006  9:13AM这种样式,结果插入后变成了:
    2006-10-21 17:19:00.000这个结果是ok的
      

  6.   

    10 22 2006 10:08AM(这是正确的结果)declare @stamptime datetime
    set @stamptime =getdate()
    print @stamptime
      

  7.   

    比如如果原来值是空的时侯,现在变成了1900-1-1,如果我插入的数据是:10 22 2006  9:13AM这种样式,结果插入后变成了:
    2006-10-21 17:19:00.000这个结果是ok的
    -----------------------------------------------------------
    为什么,搞不懂,我认为插入的是这种样式的10 22 2006  9:13AM插入结果就应该是10 22 2006  9:13AM的
      

  8.   

    你系统可能设置是12小时制,所以你插入的10 22 2006  9:13AM会变成2006-10-21 17:19:00.000
    ________________________________________________________?在哪里设?系统时间哪里吗,不过前两天我试过没有问题啊,可以实现10 22 2006  9:13AM这种结果啊!