【问题标题】:Time intervals in Visual StudioVisual Studio 中的时间间隔
【发布时间】:2021-02-28 08:20:21
【问题描述】:

我正在寻求您的帮助,以便在我的小项目中获得“季度”。

我的 VB.NET 项目是公司的“日常工作”。我正在使用 Visual Studio 2010 - Windows 应用程序 - SQL Server 2012,我想查看“第一季度、第二季度……等”一年季度发生的“工作”。从网格视图中的组合框中选择。

请帮忙

====下面的代码是要执行的函数====

Public Sub Load_WorkDayTable_By_period(ByVal DateWork As Date)
    WorkDayTable.Clear()
    Dim cmd As New SqlCommand(" select (@DateWork % 100 - 1) / 3 + 1 as [Quarter] From WorkDayTable ", connSQLServer) 
   
    cmd.Parameters.Add("DateWork", SqlDbType.Date).Value = DateWork
   
    connSQLServer.Open()
    WorkDayTable.Load(cmd.ExecuteReader)
    connSQLServer.Close()
    cmd = Nothing
End Sub

==========这是调用函数的子

Private Sub Com_viewper_SelectedIndexChanged(sender As System.Object, e As System.EventArgs) Handles Com_viewper.SelectedIndexChanged
    If Com_viewper.SelectedItem = "الربع الأول" Then

        load_WorkDayTable()
        Load_WorkDayTable_By_period(Com_viewper.SelectedValue)
        DataGridView1.DataSource = WorkDayTable
        With DataGridView1
            .DataSource = WorkDayTable
            .Columns("EmpName").HeaderText = "اسم الشركة"
            .Columns("EmpName").Width = 150
            .Columns("Workk").HeaderText = "الموظف"
            .Columns("Workk").Width = 100
            .Columns("DateWork").HeaderText = "رقم الهاتف"
            .Columns("DateWork").Width = 100
            .Columns("NoteWork").HeaderText = "البريد الالكتروني"
            .Columns("NoteWork").Width = 100
            .Columns("WorkNum").HeaderText = "رقم العمل"
            .Columns("WorkNum").Width = 100
            .Columns("flagg").HeaderText = "مؤشر"
            .Columns("flagg").Width = 120
            .Columns("EmpNum").HeaderText = "رقم الموظف"
            .Columns("EmpNum").Width = 120
            .Columns("Worki").HeaderText = "عمل"
            .Columns("Worki").Width = 100
            .Columns("Workii").HeaderText = "عمل"
            .Columns("Workii").Width = 100
            .Columns("Workc").HeaderText = "عمل"
            .Columns("Workc").Width = 100
            .Columns("Workcc").HeaderText = "عمل"
            .Columns("Workcc").Width = 100
            .Columns("WorkD").HeaderText = "عمل"
            .Columns("WorkD").Width = 100
        End With

    End If
End Sub

【问题讨论】:

  • 为了帮助编写查询,您需要显示示例数据、预期结果和您的尝试。否则我们只是在猜测。
  • 这有点奇怪。除了存在行之外,您实际上并没有从表中选择任何内容。每一行的结果都是一样的。你到底想做什么?
  • 对不起,我只是忘记添加调用函数的子
  • 使用DATEPART(quarter, date_column) 更多细节请参考文档docs.microsoft.com/en-us/sql/t-sql/functions/…
  • 并且正在尝试在特定时间间隔内检索数据>

标签: sql-server vb.net time


【解决方案1】:

EndDate 加一,因为日期是上午 12 点。你可能不得不玩一点。我不得不猜测您 WorkDayTable 中日期字段的名称。

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    ComboBox1.Items.AddRange({"First Quarter", "Second Quarter", "Third Quarter", "Fourth Quarter"})
End Sub

Private Sub ComboBox1_SelectionChangeCommitted(sender As Object, e As EventArgs) Handles ComboBox1.SelectionChangeCommitted
    Dim StartDate As Date
    Dim EndDate As Date
    Dim CurrentYear As Integer = Now.Year
    Select Case ComboBox1.SelectedItem.ToString
        Case "First Quarter"
            StartDate = New Date(CurrentYear, 1, 1)
            EndDate = New Date(CurrentYear, 4, 1)
        Case "Second Quarter"
            StartDate = New Date(CurrentYear, 4, 1)
            EndDate = New Date(CurrentYear, 5, 1)
        Case "Third Quarter"
            StartDate = New Date(CurrentYear, 7, 1)
            EndDate = New Date(CurrentYear, 10, 1)
        Case "Fourth Quarter"
            StartDate = New Date(CurrentYear, 10, 1)
            EndDate = New Date(CurrentYear + 1, 1, 1)
        Case Else
            MessageBox.Show("Please select a quarter")
            Exit Sub
    End Select
    Debug.Print($"{StartDate}, {EndDate}")
    Load_WorkDayTable_By_period(StartDate, EndDate)
End Sub

Private ConStr As String = "Your connection string"
Private WorkDayTable As New DataTable

Public Sub Load_WorkDayTable_By_period(StartDate As Date, EndDate As Date)
    WorkDayTable.Clear()
    Using connSQLServer As New SqlConnection(ConStr),
            cmd As New SqlCommand(" select * From WorkDayTable Where WorkDate Between @StartDate And @EndDate;", connSQLServer)
        cmd.Parameters.Add("@StartDate", SqlDbType.Date).Value = StartDate
        cmd.Parameters.Add("@EndDate", SqlDbType.Date).Value = EndDate
        connSQLServer.Open()
        Using reader = cmd.ExecuteReader
            WorkDayTable.Load(reader)
        End Using
    End Using
End Sub

【讨论】:

    【解决方案2】:

    我倾向于通过获取所需年份的第一天然后添加适当的月数来指定季度,例如

    Private Function GetRecordsByQuarter(year As Integer, quarter as Integer) As DataTable
        Dim firstDayOfYear As New Date(year, 1, 1)
        Dim inclusiveStartDate = firstDayOfYear.AddMonths(3 * (quarter - 1))
        Dim exclusiveEndDate = inclusiveStartDate.AddMonths(3)
    
        Using adapter As New SqlDataAdapter("SELECT * FROM MyTable WHERE CreatedDate >= @StartDate AND CreatedDate < @EndDate",
                                            connectionString)
            With adapter.SelectCommand.Parameters
                .Add("@StartDate", SqlDbType.DateTime2).Value = inclusiveStartDate
                .Add("@EndDate", SqlDbType.DateTime2).Value = exclusiveEndDate
            End With
    
            Dim table As New DataTable
    
            adapter.Fill(table)
    
            Return table
        End Using
    End Function
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-03
      • 1970-01-01
      • 2023-04-07
      • 2021-08-21
      • 2015-03-12
      相关资源
      最近更新 更多