ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 966|回复: 5

[求助] 求用SQL语句对字符与日期混合的检索方法

[复制链接]

TA的精华主题

TA的得分主题

发表于 2018-1-24 12:59 | 显示全部楼层 |阅读模式
本帖最后由 awfitg 于 2018-1-24 14:37 编辑

求哪位老师帮忙解决一下这个问题:
本意是向外部excel表格中根据条件提取数据的,功能已经实现了,但是对于时间的筛选总是不对。附件里面有时间和字符串混用的信息,现在主要是SQL语句的时间条件总不能得到我想要的结果,向老师们讨教。注:附件中日期列有些为一整串字符串,大部分为mm/dd/yyyy hh:mm:ss格式

Public Sub ordeR()
Application.ScreenUpdating = False
Dim pathStr As String, strConn As String
Dim conn As Object, rst As Object, coun As Object, rst2 As Object
Dim strSql As Object, FirstRec, cat As Object

Set conn = CreateObject("ADODB.connection")
Set rst = CreateObject("scripting.dictionary")
Set strSql = CreateObject("scripting.dictionary")
Set cat = CreateObject("ADOX.Catalog")

pathstr2 = ThisWorkbook.Path & "\test.xlsm"
strConn = "provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & pathstr2 & ";Extended Properties='Excel 12.0;HDR=NO;IMEX=1'"

conn.CursorLocation = 3
conn.Open strConn
cat.ActiveConnection = strConn

For i = 1 To 5
    a = CStr(Replace(Replace(cat.tables(i).Name, "#", "."), "'", "")) '这个地方是另外一个excel表sheet的名称,是个IP地址转译
    Sheets.Add before:=Sheets(1)
    ActiveSheet.Name = Left(a, Len(a) - 1)
    strSql(i) = "select F1,format(LEFT(F2,11),'yyyy/mm/dd')as 日期,F3,F4,F5,F6 from [" & a & "]"
    strSql(i) = "select * from (" & strSql(i) & ") where 日期 >#11/09/2017#"
    Set rst(i) = conn.Execute(strSql(i))
    ActiveSheet.Cells.ClearContents
    ActiveSheet.Range("A1").CopyFromRecordset rst(i)
    ActiveSheet.Cells.EntireColumn.AutoFit
    r = ActiveSheet.Range("A65536").End(xlUp).Row
    ActiveSheet.Cells(r + 3, 1) = "共找到:" & rst(i).RecordCount - 1 & "条记录"
Next

rst.RemoveAll
strSql.RemoveAll
Set rst = Nothing
Set strSql = Nothing

conn.Close
Set conn = Nothing
Exit Sub

Application.ScreenUpdating = True
End Sub


模版.zip

16.02 KB, 下载次数: 12

TA的精华主题

TA的得分主题

发表于 2018-1-24 13:13 | 显示全部楼层
strSql(i) = "select F1,format(LEFT(F2,11),'yyyy/mm/dd')as 日期,F3,F4,F5,F6 from [" & a & "]"
    strSql(i) = "select * from (" & strSql(i) & ") where 日期 >#11/09/2017#"
第一条语句将时间格式化为年月日,但第二条语句却是月日年的格式?

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-1-24 14:14 | 显示全部楼层
ly 发表于 2018-1-24 13:13
strSql(i) = "select F1,format(LEFT(F2,11),'yyyy/mm/dd')as 日期,F3,F4,F5,F6 from [" & a & "]"
    st ...

多谢提醒,这个是我调试的时候没改回来,这个匹配我试过了,返回没任何值。

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-1-24 14:35 | 显示全部楼层
awfitg 发表于 2018-1-24 14:14
多谢提醒,这个是我调试的时候没改回来,这个匹配我试过了,返回没任何值。

附件中日期列部分为一整串字符串,大部分日期格式为mm/dd/yyyy hh:mm:ss格式的。

TA的精华主题

TA的得分主题

发表于 2018-1-24 15:46 | 显示全部楼层
本帖最后由 ly 于 2018-1-24 15:47 编辑
awfitg 发表于 2018-1-24 14:35
附件中日期列部分为一整串字符串,大部分日期格式为mm/dd/yyyy hh:mm:ss格式的。

如果原来的是文本字符,则可以用DateValue(format(....))函数转换后再进行运算比较。

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-1-24 23:05 | 显示全部楼层
ly 发表于 2018-1-24 15:46
如果原来的是文本字符,则可以用DateValue(format(....))函数转换后再进行运算比较。

SQL语句这种混搭还是不行,提示“标准表达式中数据类型不匹配”,想先拆开字符集和日期集合分开检索再合并,但是日期的SQL检测错误。
For i = 1 To 10
    a = CStr(Replace(Replace(cat.tables(i).Name, "#", "."), "'", ""))
    strSql(i) = "select * from [" & a & "] where [F2] like'%Timestamp%'"    '先将非日期的字符内容提取出来
    strsql1(i) = "select *  from [" & a & "] where [F2] not like'%Timestamp%'" '将日期的内容提取来
    strsql1(i) = "select * from (" & strsql1(i) & ") where datevalue([f2]) >=#2017/11/9#"   '将提取的全部日期进行查询,提示错误’
    '想在这用union all语句合并起来,但是上一行语句已经提示 "标准表达式中的数据类型不匹配"   有日期的部分已经检索正确,但就是出这个错误,过不了。
    Set rst(i) = conn.Execute(strsql1(i))
    Sheets.Add before:=Sheets(1)
    ActiveSheet.Name = Left(a, Len(a) - 1)
    ActiveSheet.Range("A1").CopyFromRecordset rst(i)
    ActiveSheet.Cells.EntireColumn.AutoFit
    r = ActiveSheet.Range("A65536").End(xlUp).Row
    ActiveSheet.Cells(r + 3, 1) = "共找到:" & rst(i).RecordCount - 1 & "条记录"
Next
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关闭

最新热点上一条 /1 下一条

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-4-26 14:19 , Processed in 0.032986 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表