SQL SERVER日期/时间不一致

SQL SERVER日期/时间不一致,sql,datetime,sql-server-2012,datetime-format,Sql,Datetime,Sql Server 2012,Datetime Format,我在SQL Server中有一个数据类型为Datetime的字段。我只是简单地选择日期 select impDate from tbl1 发生的情况是-am/pm部分不一致…请参见图片 可以看出,在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”)

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

select impDate from tbl1
发生的情况是-am/pm部分不一致…请参见图片


可以看出,在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”)

vs

也许需要考虑的更重要的事情是,您不应该在
日期时间
中插入
字符串
,而应该插入
日期时间
。您的
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

为什么3:17应该是
PM
。如果您使用的是sysdate或getdate,请检查服务器时间和数据库时间,我猜其中一个是12小时。换句话说:SQL数据库上的时间是多少。(将其转换为24小时表示法或确保包括AM/PM。运行SQL SERVEr的服务器上的时间是多少…“可以看出,在12:00以下和12:59之前,它似乎可以正常工作”我们看不到任何东西您只给我们提供了没有上下文的随机行您可以添加一些上下文吗?为什么日期时间不正确?您期望的是什么,为什么?这些日期时间值是如何添加的,来自什么原始来源?任何可以让我们更好地了解您认为存在问题的原因的信息都会有所帮助@bobski,你只向我们展示了随机的数据行,而不是它们为什么和如何出错。数据是如何进入数据库的?你为什么认为它是错误的?我知道你说的是“数据库中的凌晨3:30应该是下午3:30”但这并没有告诉我们你为什么会这样想。用代码,而不是上下文数据向我们展示。我使用了参数。我遵循以前的程序员所做的,所以我基本上和他们做了相同的事情。@Bobski-你使用的是什么语言?如果是c#,我有一个现成的例子可以帮助你。我使用的是vb.net-@Bobski-我的vb有点像rus但是我认为这应该是可行的(但不确定函数的返回类型).Pfft看看Igor与文档的链接,比如某种badassno problem,如果你展示了C#代码,该代码从一开始就执行了不正确的插入:D记住,我们没有任何与你的问题相关的上下文。
// military (24 hour clock)
DateTime.Now.ToString("MM/dd/yyyy HH:mm:ss");
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