【问题标题】:Inserting CDate to SQL Server 2012 Flip Day and Month将 CDate 插入 SQL Server 2012 翻转日期和月份
【发布时间】:2014-07-08 18:20:57
【问题描述】:

我在将日期从 VB.net 程序插入到 SqlServer2012 实例时遇到问题。

首先是我如何生成数据(Vb.net)

ExitTime = CDate("1.1.1970 00:00:00").AddSeconds(currentField).ToLocalTime

我们将此值添加到存储过程(Vb.net)

With comsql5.Parameters.AddWithValue("@ExitTime", ExitTime)

在 Sql Server 存储过程中

@ExitTime datetime, [...]
[...]
Insert into [table] ([ExitTime]) VALUES (@ExitTime)

这是vb.net中退出时间的输出 退出时间:08/07/2014 2:06:31 PM

这里是Sql server数据库中的同一行 2014-08-07 14:06:31.000

我希望在数据库中看到的是 2014-07-08 14:06:31.00 因为程序中的另一部分对字段进行了检查,但是作为字符串...并且它不匹配,因为它翻转了月份和日期

编辑:需要明确的是,我无法更改作为字符串进行比较的另一部分。我知道这是比较datetime 的不好方法。

感谢您的宝贵时间

【问题讨论】:

  • 所以日期时间值是 sql 正是你发送的对吗?将日期时间作为字符串检查的其他代码是问题不在于 sql server 的地方。请记住,您“看到”的并不是真正存储在 sql server 中的内容。比较日期时间值的最佳方法是使用日期时间值,而不是字符串表示。
  • 将“程序的另一部分”中的代码更改为不尝试作为字符串进行比较,而是作为日期时间值进行比较,这样就不会有任何问题。您正在尝试使用 presentation 值(用户看到的)而不是 data 值(数据的存储方式),这是错误的。
  • 如果您无法更改错误编写的代码,那么您无能为力。由于其他人(我猜可能是供应商)编写的一些流氓代码,您想要更改 sql server 引擎的工作方式。也许您可以使用计算列来提供帮助,但这实际上是在处理症状而不是问题。我感受到你的痛苦,我自己也经历过。
  • 您是否在调试器中检查 ExitTime 的值?如果是这样,我怀疑它以美国格式显示日期,所以 08/07/2014 是 8 月 7 日,这正是您在数据库中看到的。
  • 我现在可以给你答案。如果您想以某种格式查看日期,则需要设置该格式。日期如何存储在 Sql Server 中并不重要。试试这个:System.Threading.Thread.CurrentThread.CurrentCulture = new CultureInfo("fr-FR") dim s as string = DateTime.Now.ToString()

标签: sql-server vb.net date datetime date-format


【解决方案1】:

您是否尝试过使用转换功能?

SELECT CONVERT (VARCHAR, getdate(), 121);

查看此链接以获取更多信息 MSDN - CAST and CONVERTSQL Server Datetime Format

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-30
    • 1970-01-01
    • 2021-04-09
    • 1970-01-01
    • 2016-03-09
    • 2018-12-24
    相关资源
    最近更新 更多