本帖最后由 default7 于 2013-04-09 17:44:37 编辑

解决方案 »

  1.   

    sqlserver的时间字段能存0x0000A09C012CA92A这样的?
      

  2.   

    mysql> SELECT FROM_UNIXTIME(1196440219);
            -> '2007-11-30 10:30:19'
    mysql> SELECT FROM_UNIXTIME(1196440219) + 0;
            -> 20071130103019.000000
    mysql> SELECT FROM_UNIXTIME(UNIX_TIMESTAMP(),
        ->                      '%Y %D %M %h:%i:%s %x');
            -> '2007 30th November 10:30:59 2007'
      

  3.   

    是SQL2008数据导出为SQL,然后DATETIME类型的字段自动变成了这样的了。
    ~ 除非导出为TXT文本才是时间格式,否则都是这样的格式。0x开头不是很明白~我得到的时间数据全部都是这样格式:0x0000A09C012CA92A(来自SQL2008,字段类型datetime)。
    如何才可以在Mysql中将他们转换为 时间,其实他存的是时间的。浏览表的时候格式却是YYYY-mm-dd HH:ii:ss。
    在SQL2008 中SELECT 0x0000A09C012CA92A,显示的值是时间。但是在MYSQL返回的是NULL。
      

  4.   

     (不要高估你的汉语表达能力或者我的汉语理解能力)
       建议你列出你的表结构,并提供测试数据以及基于这些测试数据的所对应正确结果。
       参考一下这个贴子的提问方式http://topic.csdn.net/u/20091130/20/8343ee6a-417c-4c2d-9415-fa46604a00cf.html
       
       1. 你的 create table xxx .. 语句
       2. 你的 insert into xxx ... 语句
       3. 结果是什么样,(并给以简单的算法描述)
       4. 你用的数据库名称和版本(经常有人在MS SQL server版问 MySQL)
       
       这样想帮你的人可以直接搭建和你相同的环境,并在给出方案前进行测试,避免文字描述理解上的误差。
      

  5.   

    conv(变量,16,10)然后再用版主说的from_unixtime函数
      

  6.   

    mysql> SELECT CONV(0x0000A09C012CA92A,16,10);
    +--------------------------------+
    | CONV(0x0000A09C012CA92A,16,10) |
    +--------------------------------+
    | 0                              |
    +--------------------------------+
    1 row in set (0.00 sec)GO
    /****** Object:  Table [dbo].[gbook]    Script Date: 04/09/2013 16:04:11 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    CREATE TABLE [dbo].[gbook](
    [id] [int] IDENTITY(1,1) NOT NULL,
    [name] [nvarchar](max) NULL,
    [msg] [nvarchar](max) NULL,
    [AddTime] [datetime] NOT NULL,
    [Reply] [nvarchar](1000) NULL,
    [ok] [bit] NOT NULL,
    [Pname] [nvarchar](50) NOT NULL,
     CONSTRAINT [PK_gbook] PRIMARY KEY CLUSTERED
    (
    [id] ASC
    )WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
    ) ON [PRIMARY]
    GO
    SET IDENTITY_INSERT [dbo].[gbook] ON
    INSERT [dbo].[gbook] ([id], [name], [msg], [AddTime], [Reply], [ok], [Pname]) VALUES (18, N'小白', N'多少钱一个啊', CAST(0x0000A09C01283323 AS DateTime), N'2000', 1, N'小米')
    INSERT [dbo].[gbook] ([id], [name], [msg], [AddTime], [Reply], [ok], [Pname]) VALUES (19, N'猫猫', N'有没有优惠', CAST(0x0000A09C01287704 AS DateTime), N'有的,特价', 1, N'微软')
    INSERT [dbo].[gbook] ([id], [name], [msg], [AddTime], [Reply], [ok], [Pname]) VALUES (20, N'年轻', N'是正品的吗', CAST(0x0000A09C012888BD AS DateTime), N'绝对正品的', 1, N'HTC')
    INSERT [dbo].[gbook] ([id], [name], [msg], [AddTime], [Reply], [ok], [Pname]) VALUES (21, N'7U7', N'包邮吗', CAST(0x0000A09C01299502 AS DateTime), N'嗯包邮', 1, N'三星')
    INSERT [dbo].[gbook] ([id], [name], [msg], [AddTime], [Reply], [ok], [Pname]) VALUES (22, N'刘士', N'您好', CAST(0x0000A09C012C9C75 AS DateTime), N'好', 1, N'X ONE')
    INSERT [dbo].[gbook] ([id], [name], [msg], [AddTime], [Reply], [ok], [Pname]) VALUES (23, N'潘多拉', N'有没有外壳送?', CAST(0x0000A09C012C9E04 AS DateTime), N'有', 1, N'G12')
    INSERT [dbo].[gbook] ([id], [name], [msg], [AddTime], [Reply], [ok], [Pname]) VALUES (24, N'lujuan', N'您好vvvv', CAST(0x0000A09C012C9F92 AS DateTime), N'您好', 1, N'G13')
    INSERT [dbo].[gbook] ([id], [name], [msg], [AddTime], [Reply], [ok], [Pname]) VALUES (25, N'琪儿', N'test', CAST(0x0000A09C012CA113 AS DateTime), N'test33', 1, N'iphone5')
    INSERT [dbo].[gbook] ([id], [name], [msg], [AddTime], [Reply], [ok], [Pname]) VALUES (966, N'ddd', N'我的怎么还没收到?', CAST(0x0000A19B00E1B75D AS DateTime), NULL, 0, N'三星')
    SET IDENTITY_INSERT [dbo].[gbook] OFF
    以上是导出来自SQL  2008
      

  7.   

    不好意思,没说明白,如果使用conv()函数进行进制转换要求不能有非16进制字符,所以先把x去掉,使用replace()函数select from_unixtime(conv(replace(upper('变量'),'X',''),16,10))
      

  8.   


    不对啊~ 变成0了,仍旧:
    mysql> select from_unixtime(conv(replace(upper(0x0000A09C012CA92A),'X',''),16,10
    ))
        -> ;
    +----------------------------------------------------------------------+
    | from_unixtime(conv(replace(upper(0x0000A09C012CA92A),'X',''),16,10)) |
    +----------------------------------------------------------------------+
    | 1970-01-01 08:00:00                                                  |
    +----------------------------------------------------------------------+
    1 row in set (0.00 sec)
    mysql> select conv(replace(upper(0x0000A09C012CA92A),'X',''),16,10)
        -> ;
    +-------------------------------------------------------+
    | conv(replace(upper(0x0000A09C012CA92A),'X',''),16,10) |
    +-------------------------------------------------------+
    | 0                                                     |
    +-------------------------------------------------------+
    1 row in set (0.00 sec)
      

  9.   

    0x0000A09C012CA92A这个是变量,需要加单引号的
      

  10.   

    和这个没关系,你们都没实际动手试过吧,sql server输出的这个16位数的值非常大,转到mysql里以后得到的10进制数用from_unixtime直接就溢出了,所以就是0,现在就不知道sql server输出的这个16进制数是怎么计算的,否则就能反推了