【发布时间】:2015-01-08 14:21:48
【问题描述】:
我遇到了一个很奇怪的问题。
当我过滤当年的数据时,一切正常: 但是如果我想回到一年前,突然我得到一个空白的报告......
去明年不是问题,就像你在这里看到的那样:
我的代码是:
These 2 values come through as a 'date' in a private sub
datumvan = DateTimePickerVan.Value.ToLocalTime
datumtot = DateTimePickerTot.Value.ToLocalTime
Dim culture As New CultureInfo("pt-BR")
sqlstr = "SELECT * FROM [Geschiedenis$] WHERE Aangemeld BETWEEN '" & datumvan.ToString("d", culture) & "' AND '" & datumtot.ToString("d", culture) & "'"
还可以查看 sql 在进行调试时的样子:
因此得出结论:除非我去上一年,否则一切正常。 如果我放置:NOT BETWEEN,一切都颠倒过来,我会看到所有数据。
我也尝试用 >= 和
有什么想法吗?
【问题讨论】:
-
听起来您的日期参数顺序错误。较早的日期需要作为第一个参数,较晚的日期需要作为第二个参数。停止 sql 字符串行上的调试器并查看日期参数的值。
-
在我看来,您将日期数据存储或视为字符串。如果是这样,你不能指望它像约会一样。
-
Tab Alleman:我更新了我的帖子,所以你可以看到 sql 字符串并且日期在正确的位置。 Plutonix:那么,为了将日期以 dd/mm/yyyy 格式作为日期,我需要进行哪些更改?
-
刻度和 .ToString 将日期(值类型)转换为文本/字符串。 “3”和“0”之间没有任何内容,因为“3”在 TEXT COMPARE 中的计算结果大于“0”。如果 dbCols 是 Date 类型,请去掉刻度和 .ToString()
-
如果您直接对您的数据库运行查询 - 使用上一年的连接字符串,您会得到结果吗?