首页 > 解决方案 > 在图表中显示时间戳而不是日期 - SQL

问题描述

我正在为客户处理数据处理页面。

我制作了一个图表,显示来自我的 SQL 服务器的数据。
在我的 x 轴上,我有一个日期,但整个列还包含一个时间戳,例如“08/01/2019 14:34”,但不可见。

如下图所示,如果可能,如何格式化 x 轴值以仅显示时间或 dbo 的整个值?

仅含日期的图表图片

我是否必须在屏幕上格式化图表的大小,如果是,我该怎么做?我尝试在图表设置中寻找一个选项。

这是代码片段:

Private Sub dgvSiteChart() 'Load data from dbo
    DateandTimeString24H = "'" & Date.Now.Year & "-" & Date.Now.Month & "-" & Date.Now.Day & " 00:00:00.000'" & " And " & "'" & Date.Now.Year & "-" & Date.Now.Month & "-" & Date.Now.Day & " 23:59:59.000'"
    SQLCon = New SqlConnection
    SQLCon.ConnectionString = "Data Source=" & System.Net.Dns.GetHostName() & "\KVMSQL;Initial Catalog=MHA;User ID=#####;Password =######"
    Dim READER As SqlDataReader

    Try
        SQLCon.Open()
        Dim Query As String
        Query = "SELECT DateAndTime,Tagindex,Val FROM dbo.FT WHERE tagindex=0 and DateAndTime between " & DateandTimeString24H & "ORDER BY DateAndTime"
        SQLCmd = New SqlCommand(Query, SQLCon)
        READER = SQLCmd.ExecuteReader
        While READER.Read
            chrtReportMchn.Series("LOG").Points.AddXY(READER("DateAndTime"), READER("Val"))
        End While
        SQLCon.Close()
    Catch ex As Exception
        MsgBox(ex.Message)
    Finally
        SQLCon.Dispose()
    End Try
End Sub

日期和时间格式为dd/MM/yyyy HH:mm(24H).

更新:10/1-19

在@Markus 和他的评论的帮助下,我已经弄清楚了。代码是用FORMAT(CAST(DateAndTime as time), 'hh\:mm\ ')放在前面编辑的DateAndTime

Try
    SQLCon.Open()
    Dim Query As String
    Query = "SELECT FORMAT(CAST(DateAndTime as time), 'hh\:mm\ ') DateAndTime,Tagindex,Val FROM dbo.FT WHERE tagindex=0 and DateAndTime between " & DateandTimeString24H & "ORDER BY DateAndTime"
    SQLCmd = New SqlCommand(Query, SQLCon)
    READER = SQLCmd.ExecuteReader
    While READER.Read

标签: vb.netcharts

解决方案


您需要Dispose所有与数据库相关的对象(连接、命令、阅读器)。最好使用Using它而不是在Finally.
您必须使用参数而不是字符串连接。这样你也不会失去一天的最后一秒(在 23:59:59 和第二天 00:00:00 之间)。
您可以在连接字符串中使用一个点来表示本地计算机。如果您不使用它,则
无需返回。 您可以在客户端格式化日期。TagIndex

Private Sub dgvSiteChart()
    Try
        Using SQLCon = New SqlConnection("Data Source=.\KVMSQL;Initial Catalog=MHA;User ID=#####;Password =######")
            SQLCon.Open()
            Using SQLCmd = New SqlCommand("SELECT DateAndTime,Val FROM dbo.FT WHERE tagindex=0 and DateAndTime >= @from_inclusive and DateAndTime < @to_exclusive ORDER BY DateAndTime", SQLCon)
                Dim captured_date = DateTime.Today ' Because it may change if calling this around midnight

                SQLCmd.Parameters.Add("@from_inclusive", SqlDbType.DateTime).Value = captured_date
                SQLCmd.Parameters.Add("@to_exclusive", SqlDbType.DateTime).Value = captured_date.AddDays(1)

                Using READER = SQLCmd.ExecuteReader()
                    While READER.Read()
                        chrtReportMchn.Series("LOG").Points.AddXY(CType(READER("DateAndTime"), Date).ToShortTimeString(), READER("Val"))
                    End While
                End Using
            End Using
        End Using
    Catch ex As Exception
        MsgBox(ex.Message)
    End Try
End Sub

推荐阅读