基于Excel文件数据库上的日期的SQL查询

时间:2015-05-07 06:44:40

标签: sql database vba excel-vba excel

我使用ADO在Excel文件数据库上执行SQL查询,使用以下查询时遇到问题:

strQuery = "SELECT NUM,CREATION_DATE,CREATOR,STATE,LAST_MODIFICATION_DATE,LAST_MODIFIER,CATEGORY,MODEL_LABEL FROM [MySheet$] WHERE CREATION_DATE<='" + EndDateTextBox.Value + "' AND CREATION_DATE>='" + BeginDateTextBox.Value + "'"

执行查询但是当我在EndDateTextBox中输入2010-01-01并且在EndDateTextBox中输入2016-01-01时,我没有得到任何结果,这是不正常的,因为我的数据库中的日期不同2014年和2015年。

以下是我数据库的CREATION_DATE列的屏幕截图:

enter image description here

PS:我知道使用Excel文件作为数据库不是最好的做法,但我告诉他们这样做。

2 个答案:

答案 0 :(得分:1)

您需要将日期转换为值,ADO无法识别工作表中单元格的格式,只能识别适用的值。所以最终查询应该是这样的:

SELECT * FROM [MySheet$] WHERE CREATION_DATE <= 42370 AND CREATION_DATE >= 40179

你可以用这样的方法实现这个目的:

Sub test()
Dim DtStart as Long
DtStart = Clng(Cdate("2010-01-01"))
Msgbox DtStart
End Sub

所以,最终的SQL查询将是:

strQuery = "SELECT NUM,CREATION_DATE,CREATOR,STATE,LAST_MODIFICATION_DATE,LAST_MODIFIER,CATEGORY,MODEL_LABEL " & _
           "FROM [MySheet$] " & _
           "WHERE CREATION_DATE <= " & CLng(CDate(EndDateTextBox.Value)) & _
           "  AND CREATION_DATE >= " & CLng(CDate(BeginDateTextBox.Value)) 

或者它可以是这样的:

strQuery = "SELECT NUM,CREATION_DATE,CREATOR,STATE,LAST_MODIFICATION_DATE,LAST_MODIFIER,CATEGORY,MODEL_LABEL " & _
           "FROM [MySheet$] " & _
           "WHERE CREATION_DATE BETWEEN " & _ 
            CLng(CDate(BeginDateTextBox.Value)) & " AND " & CLng(CDate(EndDateTextBox.Value)) 

这里是测试结果:

enter image description here

答案 1 :(得分:0)

convert(datetime,CREATION_DATE,103) >= convert(datetime, BeginDateTextBox.Value ,103)

对begindatetextbox和enddatetextbox

执行此操作

这应该将您的日期转换为dd / mm / yyyy格式(不是100%确定它是否适用于您可能需要先转换为字符串的日期),以便您可以以相同的格式比较它们

这是直接的sql(begindatetextbox.value除外),所以它不会像这样工作,你必须在代码中建立你的字符串,最后看起来像这样