在 2 个日期之间选择值

Posted

技术标签:

【中文标题】在 2 个日期之间选择值【英文标题】:Selecting values between 2 dates 【发布时间】:2014-02-20 19:36:31 【问题描述】:

我目前正在开发一个提供辅导服务的网站,但我已经在这个问题上停留了很长一段时间..

我有 2 个文本框,用户可以在其中选择开始日期和结束日期,当用户单击视图时,他会假设在网格视图中看到结果。我正在使用 FormParameters 将日期插入到查询中。

sqldatasource的SelectCommand

SelectCommand="SELECT [Session].Session_num AS Num, [Session].Session_Time_Stamp AS Session_Date, Student.Student_First & ' ' & Student.Student_Last AS Student FROM (([Session] INNER JOIN Student ON [Session].Student_Num = Student.Student_Num) INNER JOIN Class ON [Session].Class_ID = Class.Class_ID) WHERE ((([Session].Session_Time_Stamp) Between @firstdate And @seconddate))">

SqlDataSource 的参数

<SelectParameters>
    <asp:FormParameter Name="firstdate" Type="DateTime"/>
    <asp:FormParameter Name="seconddate" Type="DateTime"/>
</SelectParameters>

这是在用户点击查看按钮时执行的,这是我设置参数值并执行sql select的地方。

Dim fdate As DateTime = Format(CDate(txtStartDate.Text), "MM/dd/yyyy")
Dim ldate As DateTime = Format(CDate(txtEndDate.Text), "MM/dd/yyyy")
gridTutor.SelectParameters("firstdate").DefaultValue = fdate
gridTutor.SelectParameters("seconddate").DefaultValue = ldate
gridTutor.Select(DataSourceSelectArguments.Empty)
gridTutorSessions.DataBind()

fdate 和 ldate 不为空,但执行后查询结果为空。会不会是执行选择的方法不对?

编辑:我意识到问题可能出在查询和日期时间格式上。当我将文本框值转换为 DateTime 时,它​​就像 #2/20/2014# 一样。但是,即使两个日期之间存在值,它也不会返回任何内容。 如果有人对 DateTime 有访问查询,我想看看。谢谢

【问题讨论】:

那么在您应用参数后实际执行更新的 Select 命令的代码在哪里...?请给我们更多的背景信息。 奇怪的是你得到一个字符串,用CDate把它转换成日期,然后用Format把它转换回一个字符串放在一个日期里面。 我会在 "gridTutor.SelectParameters("firstdate").DefaultValue = fdate" 上添加一个断点,确保实际填充了 firstdate 和 seconddate 的值(不是空白) @the_lotus 这是 VB。人们一直在做各种可怕的事情。我见过很多情况,他们甚至都没有明确地转换任何东西。 @Wayne G. Dunn 感谢您的输入,但仍然没有显示任何内容。 【参考方案1】:

我设法通过在我的访问数据库中格式化日期来修复它,这不是最好的解决方案,但它可以解决这种情况

【讨论】:

【参考方案2】:

我相信您需要在执行“选择参数”之前手动设置 fdate 和 ldate(即使用“fdate = Format(CDate(txtStartDate.Text), "MM/dd/yyyy")”。根据以下, 以您的方式分配给 Dim 的值不会反映您想要的实时值。请参阅以下有关 VB 的内容:“您可以在创建变量时为其分配值。对于值类型,您使用初始化程序来提供要分配给变量的表达式。表达式必须计算为可以在编译时计算的常量。

【讨论】:

以上是关于在 2 个日期之间选择值的主要内容,如果未能解决你的问题,请参考以下文章

根据下拉值设置 2 个日期选择器的最小日期和最大日期

在日期之间选择第一个值

在没有年份的 2 个日期之间搜索

3个日期范围之间的Mysql查询

选择 2 个日期之间的记录平均值 SQL Netezza

Informix 日期时间选择标准(在运算符之间)