在sql server 2005下,
我想储存类似这样的时间“17:14:49.188”
有没有日期无所谓。
但是一旦我用sql语句插入的时候,就变成了“1/1/1900 17:14:49”
3位digit的毫秒没有了……请问,如何修改才能保留毫秒呢?
(我原先试着用varchar保存过,但是不能像datetime一样比较两个varchar的大小)
多谢。

解决方案 »

  1.   

    无所谓,显示时 convert(varchar,col_name,114)
      

  2.   

    -- 应该有毫秒部分啊:create table t(cdate datetime default getdate());insert into t(cdate) values(GETDATE());select * from t;
    -----------------------------
    cdate
    2010-09-14 12:50:43.840
      

  3.   

    select CONVERT(varchar(20),cdate,114) as cdate from t;
    -----------------------------
    cdate
    12:50:43:840
      

  4.   

    DECLARE @dt DATETIME
    SELECT @dt = '17:14:49.188'
    SELECT @dt,DATEPART(ms,@dt)
    /*
    1900-01-01 17:14:49.187                                187
    */
    --毫秒精度不够了
    --存varchar比较时直接cast为datetime时毫秒也会舍入的
      

  5.   


    select getdate()
    结果
    2010-09-14 12:53:38.327
      

  6.   

    select CONVERT(varchar(20),cdate,114) as cdate from t;
      

  7.   

    http://technet.microsoft.com/zh-cn/library/ms187928.aspx
      

  8.   


    SQL Server 2005 联机丛书  
     
    CAST 和 CONVERT (Transact-SQL)  
      

  9.   

    --select CONVERT(varchar(20),GETDATE(),114),这一句能解决问题么?
    --楼主不明白,直接按F1,索引convert -->  114 - hh:mi:ss:mmm(24h) 
    --但以上都不能解决这个问题吧:
    SELECT DATEDIFF(ms,CAST('17:14:49.187' AS DATETIME),CAST('17:14:49.188' AS DATETIME))
    --如是我的话直接这样解决:
    IF OBJECT_ID('fn_DTNum') IS NOT NULL DROP FUNCTION fn_DTNum
    GO CREATE FUNCTION fn_DTNum (@dt VARCHAR(30))
    RETURNS BIGINT
    AS 
    BEGIN 
    IF @dt IS NULL OR LEN(@dt) = 0 RETURN 0
    DECLARE @hh INT
    DECLARE @mm INT
    DECLARE @ss INT
    DECLARE @ms INT
    DECLARE @dtn BIGINT
    SELECT @hh = CAST(LEFT(@dt,PATINDEX('%:%',@dt)-1) AS INT)
    SET @dt = STUFF(@dt,1,PATINDEX('%:%',@dt),'')
    SELECT @mm = CAST(LEFT(@dt,PATINDEX('%:%',@dt)-1) AS INT)
    SET @dt = STUFF(@dt,1,PATINDEX('%:%',@dt),'')
    SELECT @ss = CAST(LEFT(@dt,PATINDEX('%.%',@dt)-1) AS INT)
    SET @dt = STUFF(@dt,1,PATINDEX('%.%',@dt),'')
    SELECT @ms = CAST(@dt AS INT)
    SELECT @dtn = @hh*60*60*1000 + @mm*60*1000 + @ss*1000 + @ms
    RETURN @dtn
    END
    GOIF OBJECT_ID('fn_CompDT') IS NOT NULL DROP FUNCTION fn_CompDT
    GO CREATE FUNCTION fn_CompDT(@dt1 VARCHAR(30),@dt2 VARCHAR(30))
    RETURNS INT
    AS
    BEGIN
    RETURN dbo.fn_DTNum(@dt2)-dbo.fn_DTNum(@dt1)
    END
    GOSELECT dbo.fn_CompDT('17:14:49.187','17:14:49.188')/*
    前者结果:
    0
    后者自定义函数结果:
    1
    */