查询仅在日期中选择月份

时间:2016-01-15 11:13:46

标签: sql vb.net ms-access-2010

我有一个查询,它将根据月份从我的数据库中选择所有记录。例如,我想选择1月份的所有记录。 month()函数对我不起作用。 query = "SELECT empid, empname, department, empdate, timeinam, " & _ "timeoutam, lateam, timeinpm, timeoutpm, latepm, thw " & _ "FROM tbldtr where Month(empdate) =" & cmbMonth.Text 具有月份名称值(“1月”,“2月”等)。我正在使用VB 2010,我的数据库是Microsoft Access。

{{1}}

4 个答案:

答案 0 :(得分:4)

好吧,假设您的组合框项目按月订单(1月,2月,3月......)排序,那么您可以将查询编写为

query = "SELECT empid, empname, department, empdate, timeinam, " & _
        "timeoutam,lateam, timeinpm, timeoutpm,latepm,thw " & _
        "FROM tbldtr where Month(empdate) =" & cmbMonth.SelectedIndex + 1

ComboBox.SelectedIndex属性是一个整数,它告诉您当前所选项的索引。此属性从零开始,因此添加一个匹配VBA月份函数返回的数字

当然,这意味着您在此行之前的某个位置会有一个检查通知您的用户从组合框中选择一些内容,并且组合框本身应将DropDownStyle设置为ComboBoxStyle.DropDownList以避免用户输入自己的“月”'

警告:虽然在这种情况下(将整数转换为字符串),但是对于Sql Injection并不太关心,最好不要沉迷于这些实践并始终使用参数化查询。

答案 1 :(得分:1)

不可否认,这与其他响应没有什么不同,但是想在执行查询之前表达检查所选索引以及最佳使用参数,如下所示。这是OleDb提供者,同样适用于所有托管数据提供者只需更改为正确的一个,例如SQL服务器使用SqlClient等。

加载ComboBox

cmbMonth.Items.AddRange(
(
    From M In System.Globalization.CultureInfo.CurrentCulture.DateTimeFormat.MonthNames
    Where Not String.IsNullOrEmpty(M)).ToArray
)

示例运行语句

If cmbMonth.SelectedIndex > -1 Then
    Using cn As New OleDb.OleDbConnection With
        {
            .ConnectionString = "Your connection string"
        }
        Using cmd As New OleDb.OleDbCommand With
            {
                .Connection = cn,
                .CommandText =
                    "SELECT empid, empname, department, empdate, timeinam, timeoutam, lateam, timeinpm, timeoutpm, latepm, thw " &
                    "FROM tbldtr where Month(empdate) = @SelectedMonth"
            }
            cmd.Parameters.Add(New OleDb.OleDbParameter With
                {
                    .ParameterName = "@SelectedMonth",
                    .DbType = DbType.Int32,
                    .Value = cmbMonth.SelectedIndex + 1
                }
            )
            ' continue
        End Using
    End Using
End If

答案 2 :(得分:0)

Month()函数返回月份编号,因此您的where条件失败。

改为使用like,

query = "SELECT empid, empname, department, empdate, timeinam, timeoutam,lateam, timeinpm, timeoutpm,latepm,thw FROM tbldtr where datename(month, empdate) =" & cmbMonth.Text

也尝试在where where条件中使用Like语句而不是equals,因为你可能会遇到Character casing的问题。更多关于Like vs (=)的讨论。

希望这会有所帮助。

希望这会有所帮助。

答案 3 :(得分:0)

您也可以使用:

"FROM tbldtr where MonthName(Month(empdate)) ='" & cmbMonth.Text & "'"