【问题标题】:VB.Net - How to get GridView to only show Date from DateTime SQL column?VB.Net - 如何让 GridView 仅显示 DateTime SQL 列中的日期?
【发布时间】:2019-09-12 07:36:14
【问题描述】:

我有一个 SQL 公式,我计划在即将用 VB.NET 开发的 Web 程序中使用它,它将在 GridView 中显示从我的 SQL 公式获得的数据。

我的 SQL 的某个特定部分遇到了问题

select A.[Inv No], A.[Project No], 
cast([Record Date] as date)as [Date],   --This area is problem field
A.[Description], A.[Problem + Repair Details], 
A.[Status], convert(float, A.[Accumulative Stroke]) 
as [Accumulative Stroke],
convert(float, A.[Preventive Stroke]) 
as [Preventive Stroke], 
A.[PIC], A.[Measurement (OK/NG)] 
from [SQL].[dbo].[MAINT_ENTRY] A 

left join (select [Inv No], max(Date +' '+ Time) as [Record Date] 
from [SQL].[dbo].[MAINT_ENTRY] 
group by [Inv No]) B 

on A.[Inv No] = B.[Inv No]

where [Record Date] = Date +' '+ Time and 
[Problem + Repair Details] <> '""' 
Order by A.[Status], A.[Inv No], A.[Date]desc

[Record Date] 是一个将DateTime 列合并为一个合并列的列,以便我获得最新数据以显示在我的程序中。这两个字段都需要采用datetime 格式才能加入。

我希望 GridView 仅在 Record Date 中显示日期,因为它在 datetime 中,我尝试使用 CAST 将格式更改为 date

虽然它在我模拟结果的 SQL Management Studio 中显示了正确的结果,但它似乎不想在 VB.Net 中发挥出色,因为我得到的结果仍然使用datetime 格式。它会删除时间数据,但仍保留时间格式。

22/4/2019 08:45:00 AM ---> 22/4/2019 12:00:00 AM

这似乎是什么问题造成的?

【问题讨论】:

  • 您在 SQL 中使用的类型并不重要,因为 .NET 只有包含日期​​和时间的 DateTime 类型。尽管 VB 有 Date 类型,但它只是 DateTime 的别名。如果您不希望显示时间,则需要在 UI 中显示数据时在格式中指定该时间。如果您想在 GridView 控件中执行此操作,则要做的就是研究如何在该控件中指定格式。

标签: sql asp.net vb.net gridview webforms


【解决方案1】:

您正试图在 SQL 查询中直接转换 Datetime,而不是

cast([Record Date] as date)as [Date]

你应该这样做:

CONVERT(varchar(10), [Record Date], 103) as [Date]

正如CONVERT ( data_type [ ( length ) ] , expression [ , style ] ) 语法指定的那样:Reference

【讨论】:

  • 我以前听说过这种方法。但是最终结果算作varchar 格式还是date 格式?因为我被要求专门显示为日期。
  • "将其显示为日期"...从用户的角度来看,没关系,不是吗?如果它显示“22/04/2019”,那是我眼中的日期;)无论如何,如果您想要“仅日期”格式的结果,请查看@jmcilhinney 的评论,您应该查看如何设置GridView 控件中的日期格式(没有时间)(可能是 RowDataBound 事件?)如果您决定这样做,则 sql 查询不应进行任何转换/转换(因此您不会重复两次相同的转换)跨度>
【解决方案2】:

如果我理解您的问题,您是从某个具有 DateTime 字段的 SQL 服务器返回一个对象。您想使用 VB 仅显示日期组件。

在 VB 中,DateTime 对象有一个“Date”属性,您可以使用它来显示 DateTime 属性的日期部分。一个简单的代码示例:

Dim myDateTime as DateTime = now()
MessageBox.Show("Today's date is: " + myDateTime.Date)

如果您需要更多参考,请查看https://docs.microsoft.com/en-us/dotnet/api/system.datetime.date?view=netframework-4.8

【讨论】:

    猜你喜欢
    • 2015-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-01
    • 2014-04-07
    相关资源
    最近更新 更多