sql server 2008-获取欧洲日期格式sql



我为Datetime设置了一个数据库。

在我的应用程序中,有一个日期选择器。

问题是Db使用美国日期格式(MM/DD/YYYY),而应用程序使用欧洲日期格式(DD/MM/YYYY)

有没有办法将数据库中的列设置为使用欧洲日期格式?

我不想通过应用程序中的代码进行转换。

SQL Server不以任何字符串格式存储DateTime——它存储为8字节的数值,DATETIMEDATETIMEDATETIME

各种设置(语言、日期格式(只会影响DateTime在SQLServerManagementStudio中显示的方式,或者在尝试将字符串转换为DateTime时对其进行解析的方式。

SQL Server支持多种格式-请参阅MSDN联机丛书中的CAST和CONVERT。

因此,如果你想看到美国格式的DateTime,请使用

SELECT CONVERT(VARCHAR(30), YourDateTimeColumn, 101)

如果您需要欧洲(英国/法国/德国(格式,请使用

SELECT CONVERT(VARCHAR(30), YourDateTimeColumn, 103)

尽可能避免使用日期作为字符串是公认的"最佳实践"-如果可能,请使用本机SQL Server和.NET DATETIME数据类型来来回发送日期(与任何区域格式都不相关(。当您需要显示DATETIME时,请尝试将其转换为字符串only(最好只在UI中显示,而不是在数据库中!(

更新:如果您想插入DateTime值,正如我所说,我强烈建议使用正确的数据类型,而不是篡改特定格式的字符串。

如果必须使用字符串,则无论如何都要使用SQL Server支持的ISO-8601日期格式(稍作调整(-无论您的SQL Server语言和日期格式设置如何,此格式始终有效。

SQL Server支持ISO-8601格式,有两种风格:

  • YYYYMMDD仅用于日期(没有时间部分(;注意:没有破折号,这很重要!YYYY-MM-DD不独立于SQL Server中的日期格式设置,并且在任何情况下都不工作

或:

  • YYYY-MM-DDTHH:MM:SS表示日期和时间-请注意:此格式短划线(但它们可以省略(,并且DATETIME的日期和时间部分之间有一个固定的T作为分隔符

这对SQL Server 2000及更新版本有效。

如果您使用SQL Server 2008或更新版本和DATE数据类型(仅DATE-而不是DATETIME!(,那么您实际上也可以使用YYYY-MM-DD格式,这也适用于SQL Server中的任何设置。

不要问我为什么整个主题如此棘手和令人困惑-事实就是这样。但是使用YYYYMMDD格式,您应该可以适用于任何版本的SQL Server以及SQL Server中的任何语言和日期格式设置。

对于SQL Server 2008及更新版本,如果只需要日期部分,建议使用DATE;如果同时需要日期和时间,则建议使用DATETIME2(n(。如果可能的话,您应该尝试开始逐步淘汰DATETIME数据类型

关于">YYYY-MM-DDTHH:MM:SS表示日期和时间-请注意:此格式有短划线(但可以省略(,并且在DATETIME的日期和时间部分之间有一个固定的分隔符T":另一种选择是使用通常的空格作为数据和时间之间的分隔符:YYYYMMDD HH:MM:SS或YYYYMMDD HH:MM:SS.SSS。但是,再次强调,必须省略短划线:正如对长格式所说的那样,">请注意:没有短划线!,这非常重要!YYYY-MM-DD不独立于SQL Server中的日期格式设置,并且在所有情况下都不起作用!"请注意,时间部分需要分号!

转换为DateTime2更宽容,它可以使用和不使用破折号,即使使用欧洲语言环境。

日期没有"格式"-日期表示有格式。您应该将日期作为日期而不是字符串传递给您的应用程序,然后以任何合适的格式转换为字符串。

由于您没有说明代码中的应用程序是什么平台,因此可能会发生更改,但以下是C#中的解决方案:

DateTime dt = reader.GetDateTime(dateColumnIndex);
string s = dt.ToString("dd/MM/yyyy");

相关内容

  • 没有找到相关文章