数据库中用来表示时间字段的类型有很多种,而且每种数据库中支持的格式可能也不尽一样
今天想请假大家一下各种数据库标准时间的转换问题(都转换成:2012-08-27 19:22:22)
(sqlserver sybase mysql access oracle)
比如不同数据库中的时间字段都为billdate
在sqlserver中时间的表示有下面几种类型
 1 datetime(2012-08-27 19:22:22.333)
 2 smalldatetime (2012-08-27 19:22:22)
 3 varchar(2012-08-27 19:22:22)
 4 varchar(2012/08/27 19:22:22)
 5 varchar(20120827192222)   
  在sqlserver中可以使用Convert(datatime,billdate,20)来转换成2012-08-27 19:22:22格式
  但是不支持像上面的第5种varchar(20120827192222)表示的格式
 我有以下几个问题想求教一下大家 
1.像varchar(20120827192222)这种格式怎么转换成2012-08-27 19:22:22格式?
2.这些数据库有没有一个统一支持的格式转换函数?
3.如果没有 那么他们每种数据库分别支持哪个转换函数呢?
 此次只讨论调用系统提供的函数来转换,自己编写数据库函数不讨论。
  ( 热烈欢迎大家的回帖讨论)  

解决方案 »

  1.   

    --SQL Server
    DECLARE @i VARCHAR(30)SET @i = '20120827192222'SELECT  CONVERT(VARCHAR(10), CONVERT(DATETIME, LEFT(@i, 8), 120), 120) + ' '
            + SUBSTRING(@i, 9, 2) + ':' + SUBSTRING(@i, 11, 2) + ':' + RIGHT(@i, 2)--2012-08-27 19:22:22其它类型数据库应该也是差不多的。 参考
      

  2.   

    1.MSSQL中只能通过用户定义的function来实现。
    2.各个数据库的日期函数基本上都是自定义的,没有统一的日期转换。
    3.MSSQL中
    语句及查询结果:
    Select CONVERT(varchar(100), GETDATE(), 0): 05 16 2006 10:57AM
    Select CONVERT(varchar(100), GETDATE(), 1): 05/16/06
    Select CONVERT(varchar(100), GETDATE(), 2): 06.05.16
    Select CONVERT(varchar(100), GETDATE(), 3): 16/05/06
    Select CONVERT(varchar(100), GETDATE(), 4): 16.05.06
    Select CONVERT(varchar(100), GETDATE(), 5): 16-05-06
    Select CONVERT(varchar(100), GETDATE(), 6): 16 05 06
    Select CONVERT(varchar(100), GETDATE(), 7): 05 16, 06
    Select CONVERT(varchar(100), GETDATE(), 8): 10:57:46
    Select CONVERT(varchar(100), GETDATE(), 9): 05 16 2006 10:57:46:827AM
    Select CONVERT(varchar(100), GETDATE(), 10): 05-16-06
    Select CONVERT(varchar(100), GETDATE(), 11): 06/05/16
    Select CONVERT(varchar(100), GETDATE(), 12): 060516
    Select CONVERT(varchar(100), GETDATE(), 13): 16 05 2006 10:57:46:937
    Select CONVERT(varchar(100), GETDATE(), 14): 10:57:46:967
    Select CONVERT(varchar(100), GETDATE(), 20): 2006-05-16 10:57:47
    Select CONVERT(varchar(100), GETDATE(), 21): 2006-05-16 10:57:47.157
    Select CONVERT(varchar(100), GETDATE(), 22): 05/16/06 10:57:47 AM
    Select CONVERT(varchar(100), GETDATE(), 23): 2006-05-16
    Select CONVERT(varchar(100), GETDATE(), 24): 10:57:47
    Select CONVERT(varchar(100), GETDATE(), 25): 2006-05-16 10:57:47.250
    Select CONVERT(varchar(100), GETDATE(), 100): 05 16 2006 10:57AM
    Select CONVERT(varchar(100), GETDATE(), 101): 05/16/2006
    Select CONVERT(varchar(100), GETDATE(), 102): 2006.05.16
    Select CONVERT(varchar(100), GETDATE(), 103): 16/05/2006
    Select CONVERT(varchar(100), GETDATE(), 104): 16.05.2006
    Select CONVERT(varchar(100), GETDATE(), 105): 16-05-2006
    Select CONVERT(varchar(100), GETDATE(), 106): 16 05 2006
    Select CONVERT(varchar(100), GETDATE(), 107): 05 16, 2006
    Select CONVERT(varchar(100), GETDATE(), 108): 10:57:49
    Select CONVERT(varchar(100), GETDATE(), 109): 05 16 2006 10:57:49:437AM
    Select CONVERT(varchar(100), GETDATE(), 110): 05-16-2006
    Select CONVERT(varchar(100), GETDATE(), 111): 2006/05/16
    Select CONVERT(varchar(100), GETDATE(), 112): 20060516
    Select CONVERT(varchar(100), GETDATE(), 113): 16 05 2006 10:57:49:513
    Select CONVERT(varchar(100), GETDATE(), 114): 10:57:49:547
    Select CONVERT(varchar(100), GETDATE(), 120): 2006-05-16 10:57:49
    Select CONVERT(varchar(100), GETDATE(), 121): 2006-05-16 10:57:49.700
    Select CONVERT(varchar(100), GETDATE(), 126): 2006-05-16T10:57:49.827
    Select CONVERT(varchar(100), GETDATE(), 130): 18 ???? ?????? 1427 10:57:49:907AM
    Select CONVERT(varchar(100), GETDATE(), 131): 18/04/1427 10:57:49:920AM
      

  3.   


    declare   @date   varchar(14) 
    set   @date= '20120827192222'  
    select(left(@date,4)+'-'+substring(@date,5,2)+'-'+substring(@date,7,2)+'  '+substring(@date,9,2)+':'+substring(@date,11,2)+':'+substring(@date,13,2))
    ---------------------------------------------------------------------------------
    /*
    -------------------------
    2012-08-27  19:22:22
    */