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中而不是在我的应用程序中工作吗?
日期就是日期就是日期。不是字符串。您应该将其读取为日期,然后根据自己的选择设置格式。对于数据库来说,日期只是一个数字 - 它没有格式的概念。所以:
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");