【问题标题】:Datetime type conversion in SQLSQL中的日期时间类型转换
【发布时间】:2014-08-08 04:21:06
【问题描述】:

我从一些外部数据源获取数据,需要存储在 SQL Server 表中。但其中一项是日期时间。但我将日期时间字段设为 Varchar 格式,现在在我的 SQL 表中,我需要将其保存为 DateTime 数据类型。

CONVERT(DATETIME,[Date_time],03) 

-- 此代码在我的开发环境中有效,但在生产环境中无效。

CONVERT(DATETIME,[Date_time],120) 

-- 此代码在我的生产环境中有效,但在开发环境中无效。

这让我很难将代码从开发转移到生产,因为我必须对测试代码进行更改。

请注意,我使用的是 SQL Server 2008 R2。

无论如何我可以使代码相似吗?我无法更改两台服务器上的文化和语言,因为那里部署了许多其他应用程序,它可能会破坏两台服务器中的现有应用程序。

【问题讨论】:

  • 为什么您的生产和开发环境会有不同的文化?有点不对劲。
  • 我猜你有一些 .net 代码消耗来自外部源的数据......我不太熟悉 .net 的方式,但你的代码显然需要一些条件语句,具体取决于它运行的环境。您可以尝试发出 select @@Version SQL 并根据您返回的内容有一个条件语句来处理不同的环境。这是有关它的更多信息-msdn.microsoft.com/en-us/library/ms177512.aspx ---希望这会有所帮助。
  • SQL 的版本相同,但正如我所说,文化不同,因此需要使用不同的转换方式。我已经向我的经理提出了这个问题,为什么两个环境都有不同的文化?但我什至不得不尝试自己找到解决这个问题的方法..
  • 嗨 TMNT2014,我没有从 .net 中提取数据。但是在 SQL 中使用 openquery 来拉它。在 SQL 中提取的所有数据都可以,但由于两个服务器中的文化不同,这个日期时间文件只有问题。您告诉我的解决方案就是我什至使用的解决方案。但是想检查是否有任何标准方法可以解决此问题,而不是根据服务器名称编写 if else 条件。因为从长远来看,服务器可以更改并且代码将开始破坏。希望你能理解我的问题。非常感谢。
  • 您似乎遇到了标准化问题......您无法标准化您的环境,但需要标准化您的代码。如果您确实找到了解决此问题的标准方法,请告诉我.. 祝您好运

标签: sql .net sql-server sql-server-2008 datetime


【解决方案1】:

您可以尝试使用SET 语句来覆盖日期格式,如下所示:

SET DATEFORMAT mdy;
SELECT CONVERT(DATETIME, [Date_Time], 120);

只要您在两种环境中的存储过程/查询中都包含此代码,就可以了。您可能想在MSDN 上阅读有关此内容的信息。

【讨论】:

    【解决方案2】:

    解决您的问题的方法是提供一个功能,为每个环境计算(或定义)正确的样式。这个最简单的选项是用户定义的函数。

    CREATE FUNCTION [dbo].[fnCustomDateStyle]()
    RETURN int AS
    BEGIN
      RETURN 3 # Or 120, in the other environment
    END
    

    因此可以在各种环境中使用:

    CONVERT(DATETIME, [Date_Time], fnCustomDateStyle())
    

    【讨论】:

    • 我正在使用与过去相同的方法。但是正在寻找是否有其他标准方式。当服务器名称发生变化时,我需要更改此代码。
    • 无论如何我可以通过编写 sql 查询来获取 SQL Server 文化信息吗?
    猜你喜欢
    • 2019-06-10
    • 1970-01-01
    • 2013-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多