首页 > 解决方案 > 如何使用 MySQL 表与时间范围进行比较

问题描述

我的MySQL数据库中有这张表:

   ID   First_Name  Date_Serve     Time_Serve   RFID_Tag    Amount_Serve
   --------------------------------------------------------------
    1     John      17-11-2018      10:00:00    hdgdYun8JH   Small
    2     George    18-11-2018      11:00:00    kdjfHluhHB    Big

并有此代码进行MySQL查询:

Private Sub TextBox3_TextChanged(sender As Object, e As EventArgs) Handles TextBox3.TextChanged
    Dim str As String = "Server=localhost;Port=3306;Database=testdb;Uid=root;Pwd=password123"

    Using con As New MySqlConnection(str)
        Dim query As String = 
            "select * from testdata where rfid_tag='" & TextBox3.Text & 
            "' and Date_Serve= '" & Date.Now.ToString("yyyy-MM-dd ") & 
            "' and Time_Serve= '" & Date.Now.ToString("HH:mm:ss ") & 
            "' or amount_serve=''"

        Dim cm As New MySqlCommand(query, con)
        con.Open()

        Dim rd As MySqlDataReader = cm.ExecuteReader()

        ' Check if any rows exist
        If rd.Read() Then
            If rd.GetString(3) = "small" Then
                MessageBox.Show("small")
            ElseIf rd.GetString(3) = "Big" Then
                MessageBox.Show("big")
            ElseIf rd.GetString(3) = "Midium" Then
                MessageBox.Show("Mid")
            End If
        End If
    End Using
End Sub

我正在寻找做的是与时间延迟 15 分钟time_serve
例如,如果时间10:00:00 AM需要为他提供他的金额,10 AM直到10:15 AM
我怎样才能做到这一点?

使用我的代码,我可以在准确的时间为他服务,但我需要一个范围之类的东西。

标签: mysqlvb.net

解决方案


我相信你正在寻找BETWEEN

在那里,您可以询问某个时间率是否介于 time_serve 和您分配的额外时间之间

这可能是这样的:

SELECT * FROM testdata 
         WHERE @0 BETWEEN TIMESTAMP( Date_Serve, Time_Serve ) 
               AND DATE_ADD( TIMESTAMP( Date_Serve, Time_Serve), INTERVAL 15 MINUTE ) )

@0您可以添加到查询本身的当前日期时间的参数在哪里。从您的代码中可以看出,您不应该只使用字符串连接来构建查询字符串本身,只需查看 MySqlParamater 以及如何将它们与您的查询一起使用(但我知道这不是问题的一部分)

请注意,我不确定将日期和时间列转换为 DATETIME 语句的最佳方法,这里似乎有些混乱。或者,您也可以只检查Time_Serve字段 ifDate_Serve也是查询的参数


推荐阅读