DateTime列未正确显示时间

时间:2014-01-15 08:34:13

标签: sql-server sql-server-2008 tsql

我有一个带有DateTime列的表。我使用这样的存储过程更新它:

INSERT INTO table (DateTimeColumn) VALUES (GETDATE())

我已尝试使用CURRENT_TIMESTAMP,但该列仍将时间显示为00:00:00

我做错了吗?

感谢。

存储过程:

ALTER PROCEDURE [dbo].[StoredProcedure]
    @foo(50) = null,
    @foo(50) = null,
    @foo= null,
    @foo(200)= null,
    @InsertTS datetime =null,
    @foo(50)  = null
AS
    SET @InsertTS = ISNULL(@InsertTS, GETDATE())
    SET @foo = ISNULL(@foo, user)

    INSERT INTO table (foo, foo, foo, foo, InsertTS, foo)
    VALUES (@foo, @foo, @foo, @foo, @InsertTS, @foo)

3 个答案:

答案 0 :(得分:0)

您的SP看起来不错,它会插入正确的日期时间值。确保将正确的日期时间值传递给@InsertTS datetime参数。如果它为null,则只考虑具有适当值的GETDATE()值。正如您所提到的那样,时间戳为00:00:00,我相信您只将没有时间的Date值传递给SP,因为它的00:00:00数据类型默认情况下将DATETIME分配给时间戳。

例如,如果您将 2014-01-15 传递给@InsertTS,则会插入 2014-01-15 00:00:00.000 。如果您传递空值,它将插入GETDATE()值,例如: 2014-01-15 14:48:24.757

运行以下SQL,我猜你会更好理解。

declare @d datetime = '2014-01-15'
declare @s datetime = null
select ISNULL(@d,GETDATE())
select ISNULL(@s,GETDATE())

答案 1 :(得分:0)

请在Datetime功能后将其投放到ISNULL()

E.g:

declare @d datetime = '2014-01-15'
declare @s datetime = Null
select Cast(ISNULL(@d,GETDATE()) AS Datetime)
select Cast(ISNULL(@s,GETDATE()) AS Datetime)

答案 2 :(得分:-1)

我做了一个解决方法,以防止问题发生:

  1. 删除SET @InsertTS = ISNULL(@InsertTS, GETDATE())
  2. 明确将GETDATE()放在INSERT声明中:

    INSERT INTO Table(InsertTS)VALUES(GETDATE())

  3. ISNULL()函数只是从GETDATE()函数中获取日期。

    感谢您的回复。