SQL SERVER日期/时间不一致

时间:2016-11-14 18:59:41

标签: sql datetime sql-server-2012 datetime-format

我在SQL Server中有一个数据类型为Datetime的字段。我只是选择日期

select impDate from tbl1

发生了什么 - 上午/下午部分不一致...请参阅图片

enter image description here

可以看出 - 它似乎适用于12:00以下的所有东西,直到它到达12:59 - 此时每小时被识别为AM - 当2:46和3:17应该是PM 。

这就是sql server中的样子......

  

2016-10-18 10:25:16.000

编辑:

  

DateTime.Now.ToString(" MM / dd / yyyy hh:mm:ss")

2 个答案:

答案 0 :(得分:4)

我将根据问题中的信息猜测您使用hh来检索当前日期和时间的字符串值来检索12小时格式的小时数。如果你使用字符串连接来构建你的sql(非常糟糕,你应该使用参数)这可以解释这个问题。

但是,修复不是使用军事时间来插入日期,而是使用参数化查询并将DateTime实例直接传递给参数的值。

以下是如何使用参数来避免将来出现此类问题的快速示例。

Public Function SomeFunction(ByVal dateToInsert As DateTime)
    Dim sql As String = "INSERT INTO tbl1 (impDate) VALUES(@impDate)"

    Using cn As New SqlConnection("Your connection string here"), _
        cmd As New SqlCommand(sql, cn)

        cmd.Parameters.Add("@impDate", SqlDbType.DateTime).Value = dateToInsert
        cmd.ExecuteNonQuery()
    End Using
End Function

答案 1 :(得分:3)

// standard (must provide AM/PM, AM assumed if not explicitly provided)
DateTime.Now.ToString("MM/dd/yyyy hh:mm:ss"); 

VS

// military (24 hour clock)
DateTime.Now.ToString("MM/dd/yyyy HH:mm:ss");

考虑到更重要的一点是,您不应该将strings插入datetime,您应该插入datetimes。您的ToString()暗示您正在插入数据库,这是问题源自的地方。

保持数据类型正确的数据类型,这将消除此问题。