【问题标题】:SQL CONVERT function working in SQL Server but not in applicationSQL CONVERT 函数在 SQL Server 中工作但在应用程序中不起作用
【发布时间】:2013-09-24 21:10:20
【问题描述】:

我有以下代码:

…
var sqlCom =
            new SqlCommand("SELECT TOP 1 …,CONVERT(date,dtetme) AS dtetme… FROM class c WHERE id=@id;", sqlCon);
…

        try
        {
            while (sdr.Read())
                for (int i = 0; i < 11; i++)
                    rslt[i] = sdr.GetValue(i).ToString();
        }

dtetme 列在我的 SQL Server 2012 数据库中属于 smalldatetime 类型。我只想从中提取日期,这就是我使用CONVERT(date,dtetme) 函数的原因。在 SQL Server 上运行时,它只返回预期的日期,但在应用程序中它返回带有默认时间戳的日期。我不想这样:9/19/2013 12:00:00 AM

知道为什么它在 SQL Server 中运行而不是在我的应用程序中运行吗?

【问题讨论】:

  • 天哪,请标点符号。使用它。

标签: c# sql sql-server asp.net-mvc sql-server-2012


【解决方案1】:

日期是日期是日期。不是字符串。您应该将其作为日期阅读,然后根据您的选择对其进行格式化。对于数据库来说,日期只是一个数字——它没有格式的概念。所以:

var when = sdr.GetDateTime(i);
// now format when

【讨论】:

  • 感谢您指出正确的方向,因为我不想更改循环代码,所以通过更改查询 CONVERT(VARCHAR(11),dtetme) 使其工作。
【解决方案2】:

它作为DateTime 对象返回。在 .Net 中,DateTime 不仅仅是日期,它还有一个时间部分,如果没有提供,则设置为 12:00 AM。

您应该使用DateReader.GetDateTime 将结果保存在DateTime 类型对象中,然后您可以根据需要对其进行格式化。

您可能会看到:Custom DateTime formats

类似:

for (int i = 0; i < 11; i++)
{
    DateTime temp = sdr.GetDateTime(i);
    rslt[i] = temp.ToString("M/d/yyyy");
}

【讨论】:

    【解决方案3】:

    您看到此行为的原因是 .Net 没有 Date 数据类型,只有 DateTime。如果您希望显示较短的日期,可以使用dtetme.ToString("d")

    在此处查看所有 ToString 选项: http://msdn.microsoft.com/en-us/library/zdtaw1bw.aspx

    【讨论】:

      【解决方案4】:

      回答您问题的关键是您的值表示为日期类型而不是字符串。 sql sever 中的日期表示为 Aaron 在评论中所写。

      这意味着您需要使用某种模式对其进行格式化。在那种模式下,你会说你需要什么时间。

      看来,在您的 RDBMS 中,默认情况下我使用的模式只打印日月和年。另一方面,在您的应用程序中是模式dd/MM/YY hh:mm:ss tt

      只需将其格式化为您所期望的。

      一个例子

      DateTime.Now.ToString("yyyy/MM/dd");

      【讨论】:

      • SQL Server 中的日期时间在内部表示为两个整数:(a) 从 1900-01-01 偏移的天数和 (b) 从午夜开始的 0.33 毫秒增量。它与纪元(1970-01-01)无关 - 我认为您将此与 Unix 时间戳混淆了。
      猜你喜欢
      • 2012-05-30
      • 2016-01-03
      • 1970-01-01
      • 2010-10-29
      • 2019-07-12
      • 1970-01-01
      • 1970-01-01
      • 2016-09-11
      • 1970-01-01
      相关资源
      最近更新 更多