如何在与 SQL 的连接中设置日期格式?

Posted

技术标签:

【中文标题】如何在与 SQL 的连接中设置日期格式?【英文标题】:How to set date format in a connection to SQL? 【发布时间】:2011-09-05 01:21:42 【问题描述】:

在 Microsoft SQL Server Management Studio 中,调用存储过程后,我可以看到时间在表中有2011-05-20 19:56:09 的格式。

但是,在我的 C# 程序中,使用OdbcConnection 从表中获取记录后,我发现时间的格式为05/20/2011 19:56:09。所以我手动将格式MM/DD/YYYY hh:mm:ss转换为YYYY-MM-DD hh:mm:ss(实际上,由于显示的小时是19,我如何验证格式是hHH?)。

我的问题是为什么以及在连接的哪个部分,格式会改变?如何在我的连接中设置不变的文化?

cmd = new OdbcCommand("?=CALL stored_procedure_in_SQL(?,?)", m_SqlConn);
cmd.Parameters.Add(new OdbcParameter("RETURN_VALUE", OdbcType.Int, 4,
    ParameterDirection.ReturnValue, false, 0, 0, null, 
    DataRowVersion.Default, null));

//@parameter1
cmd.Parameters.Add("@parameter1", OdbcType.VarChar, 50).Value = value1;

//@parameter2
cmd.Parameters.Add("@parameter2", OdbcType.Int)=value2;

object objTime=ds.Tables[0].Rows[0][0]
Console.WriteLine(objTime.Tostring()) //05/20/2011 19:56:09
DateTime dateTime = Cdate(objTime, "MM/dd/yyyy h:mm:ss tt"); 
//2011-05-20 19:56:09 
Console.WriteLine(dateTime.ToString("yyyy-MM-dd HH:mm:ss")); 

//Function Cdate
static public DateTime Cdate(object val, string format)

    // check if the object is a date time alread
    string str;
    if(val is DateTime)
    
        // Since val is already a dateTime,Return here
        return (DateTime)val; 
    

    // convert via string
    if(val != DBNull.Value)
    
        str = val.ToString().Trim();
    
    else
    
        str = "";
    

    if(str == "")
    
        return DateTime.MinValue;
    
    else
    
        return DateTime.ParseExact(str, format, 
            CultureInfo.InvariantCulture);
    

【问题讨论】:

我怀疑该值在数据库中是否有格式。 Check here for details (处理 C# DateTime 但此处可能应用相同类型的逻辑)。 你在CDate方法中有太多的returns。你能告诉我们你的案子是哪一个被执行的吗? @Snowbear,第一次返回是在我的程序中执行的,正如注释所添加的 A DateTimeDateTimeDateTime - 它没有格式 - 它只是一个 DateTime。您看到的是DateTime字符串表示 - 您可以选择您希望DateTime 的格式,但这是在逐个查询的基础上进行的,或者作为您的设置数据库 - 不是您可以在连接字符串中设置/更改的东西 【参考方案1】:

您不能在连接字符串上设置DateTime 格式。

您所看到的只是DateTime 的某个(内部)表示的不同格式。

格式由您使用的工具决定,对于 .NET 代码,由您登录时使用的文化决定。

当你想显示时间时,你需要格式化,但是当你使用自定义格式字符串时,没有CultureInfo元素参与。

检查DateTime 上的不同ToString 重载。

【讨论】:

+1 完全正确 - SQL Server 中的 DateTime 只是 DateTime - 并且没有与之关联的“格式”。 如果我没看错的话,由于我的格式是yyyy-MM-dd HH:mm:ss,不对应任何格式,所以显示的时候不用担心CultureInfo? @Summer - 我建议阅读custom Date and Time format strings 上的文档。文化可能会产生影响,尽管我不相信在这种特殊情况下会有影响。【参考方案2】:

您不能在连接字符串中设置日期格式,但可以在查询批处理中调用SET DATEFORMAT DMY

【讨论】:

以上是关于如何在与 SQL 的连接中设置日期格式?的主要内容,如果未能解决你的问题,请参考以下文章

在 SQL 表中设置日期格式 dd/mm/yyyy

如何在 HTML 日期输入标签中设置日期格式?

猫鼬如何在模型中设置日期格式

在变量中设置日期格式

怎么在excel中设置自定义日期格式

如何在asp.net core razor pages 2.2中设置日期格式和文化