Sql server 2008 强制日期从 dd/MM/yyyy 到 MM/dd/yyyy

Posted

技术标签:

【中文标题】Sql server 2008 强制日期从 dd/MM/yyyy 到 MM/dd/yyyy【英文标题】:Sql server 2008 forcing date from dd/MM/yyyy to MM/dd/yyyy 【发布时间】:2017-10-02 17:06:16 【问题描述】:

我在使用 sql server 2008 时遇到了一个奇怪的问题。我正在尝试将 dd/MM/yyyy 格式的日期保存到 sql server 2008 中,但是在插入日期后它会自动转换为 MM/dd/yyyy

注意:我的电脑时钟格式是dd/MM/yyyy

我的报表查看器日期文本框属性

enter image description here

我的数据库表中的日期 enter image description here

我的 C# 代码

lbldate.Text = DateTime.Today.ToShortDateString();

报告日期 2017 年 5 月 4 日

【问题讨论】:

如果您将其保存为 Date 或 DateTime 类型,则没有格式。格式化只是将日期转换为通常用于显示的字符串的方式,而不是保存的数据的一部分。 另外,使用 yyyy-mm-dd 表示日期字符串。 但是为什么显示为MM/dd/yyyy格式,我的电脑格式是dd/MM/yyyy 这是我的代码 lbldate.Text = DateTime.Today.ToShortDateString();如果我的计算机格式是 dd/MM/yyyy 那么它必须以相同的格式存储在数据库中。 您的计算机有长格式和短格式。仔细检查短格式是否符合您的想法。 【参考方案1】:

SQL Server 是 数据层,因此没有可用的格式;它将日期存储为 4 字节数字,该数字相对于 0 = 01/01/1900 的天数。

Application Layer DateTime 类型通常是 ODBC Canonical 表示形式,它基本上看起来像一个类,每个组件(年、月、日、小时)都有整数属性, 分, 秒, 毫秒)。

表示层是您实际看到的,也是您应该关注的地方。当您的应用程序调用ToShortDateString() 方法时,它正在从线程当前文化调用显示格式,这可能会或可能不会反映区域和语言日期和时间。

解决方案一是设置线程当前文化,但这只会转到特定文化标准显示

Thread.CurrentThread.CurrentCulture = new CultureInfo("fr-FR");

解决方案 2 是只使用自定义 DateTime 格式字符串

lbldate.Text = DateTime.Today.ToString("dd/MM/yyyy");

【讨论】:

【参考方案2】:

我不会说这是一个“问题”。这就是 SQL 处理日期的方式。您的计算机时钟格式不相关。要更改格式,请在查询中使用 CONVERT。例如:

SELECT CONVERT(varchar, GETDATE(), 103)

Results: 04/05/2017

SELECT CONVERT(varchar, GETDATE(), 101)

Results: 05/04/2017

代码页参数在此处列出:https://docs.microsoft.com/en-us/sql/t-sql/functions/cast-and-convert-transact-sql

根据您的新更新进行编辑:您的 C# 应该如下所示:

DateTime.Now.ToString("dd/mm/yyyy")

【讨论】:

是的,通过查询你可以获得想要的结果,但我想在reportviewer字段上显示日期【参考方案3】:

您看到的是查询工具如何呈现结果,而 与 Sql Server 如何存储数据无关。 Sql Server 实际上以二进制(不可读)格式存储日期。

这是一件好事。让 Sql Server 以它想要的方式存储日期(和其他数据)。您只需要担心在检索数据后如何向用户显示数据,而且大多数时候,担心格式的最佳位置甚至根本不在服务器中,而是在您的客户端语言中。

【讨论】:

以上是关于Sql server 2008 强制日期从 dd/MM/yyyy 到 MM/dd/yyyy的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 sql server 2008 r2 将日期显示为 mm/dd/yyyy hh:mm Am/PM?

从 SQL Server 2005 迁移到 SQL Server 2008:强制在表名之前使用架构名

SQL Server 2008 仅从字段中选择日期 [重复]

SQL Server 没有获取日期格式 dd-mm-yyyy

如何从 sql server 2008 中具有不同 TaskIds 的表中查找日期?

SQL Server 2008 中的 Varchar 到日期时间