SQL 服务器 date/time 不一致

SQL SERVER date/time inconsistency

我在 SQL 服务器中有一个数据类型为日期时间的字段。我将日期简单地选择为

select impDate from tbl1

发生的事情是 - am/pm 部分不一致...请看图片

正如所见 - 它似乎适用于 12:00 及以上的所有内容,直到达到 12:59 - 此时每个小时都被识别为上午 - 当 2:46 和 3:17 应该是下午。

这是 sql 服务器中的样子...

2016-10-18 10:25:16.000

编辑:

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

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

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

也许需要考虑的更重要的事情是,您不应该将 strings 插入 datetime,而应该插入 datetimes。您的 ToString() 暗示这就是您要插入数据库的内容,这是问题根源的一部分。

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

我将根据问题中的信息进行猜测,您正在使用当前日期和时间的字符串值,使用 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