SQL CONVERT 函数在 SQL Server 中工作,但在应用程序中不起作用

本文关键字:SQL 应用程序 不起作用 工作 Server CONVERT 函数 | 更新日期: 2023-09-27 18:32:50

我有以下代码:

…
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 服务器上运行时,它仅按预期返回日期,但在应用程序中,它返回的日期附加了默认时间戳。我不想这样:9/19/2013 12:00:00 AM.

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

SQL CONVERT 函数在 SQL Server 中工作,但在应用程序中不起作用

日期就是日期就是日期。不是字符串。您应该将其读取为日期,然后根据自己的选择设置格式。对于数据库来说,日期只是一个数字 - 它没有格式的概念。所以:

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

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

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

您可能会看到:自定义日期时间格式

像这样:

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

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

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

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

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

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

只需将其格式化为符合您的预期即可。

一个例子

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

相关文章: