请教VB6模糊查询SQl数据库时间的问题,急~~~ LIKE语句不好用
我SQL数据库获取的时间为年-月-日时-分-秒也是用户所必需要求的.但是对其进行查询的时候用户只输入年-月-日-时或年-月-日.以下是我的代码.IfText1.Text=...
我SQL数据库获取的时间为 年-月-日 时-分-秒 也是用户所必需要求的.但是对其进行查询的时候用户只输入年-月-日-时或年-月-日.以下是我的代码.
If Text1.Text = "" Or Text1.Text > = "a" Then
Text1.SetFocus
MsgBox "输入错误!请按格式输入日期.格式为:年-月-日"
Text1.Text = ""
Exit Sub
ElseIf Text1.Text <= "2007" Then
MsgBox "输入错误!请按格式输入日期.格式为:年-月-日"
Text1.Text = ""
Else
Adodc1.RecordSource = "select * from 状态数据 where (时间 like '%" & (Text1.Text) & "%')"
Adodc1.Refresh
Set DataGrid1.DataSource = Adodc1
DataGrid1.Refresh
If Adodc1.Recordset.EOF Then
MsgBox "无此记录"
Text1.Text = ""
Exit Sub
End If
Text1.Text = ""
End If
在论坛上我看过很多模糊查询的例子,但依然不能用.是不是与查询时间有关系??"select * from 状态数据 where (时间 like '%" & (Text1.Text) & "%')"这个语句我也改变了很多格式,但是都不能达到要求,包括"%"和"*".
麻烦各们专家给看一下.谢谢~~急~~~~~~~~~~~~~~~
如一楼,三楼所说.我现在的时间字段所用的就是DATATIME类型.也就是说获取的是系统的时间如:2008-1-3 9:30:56 但是如果改为CHAR类型的话时间就成为 01 3 2008 9:30AM 用LIKE 语句的确是能够进行查询.LIKE不支持时间查询,有没有更好的办法.二楼的办法不可用.我试了. 展开
If Text1.Text = "" Or Text1.Text > = "a" Then
Text1.SetFocus
MsgBox "输入错误!请按格式输入日期.格式为:年-月-日"
Text1.Text = ""
Exit Sub
ElseIf Text1.Text <= "2007" Then
MsgBox "输入错误!请按格式输入日期.格式为:年-月-日"
Text1.Text = ""
Else
Adodc1.RecordSource = "select * from 状态数据 where (时间 like '%" & (Text1.Text) & "%')"
Adodc1.Refresh
Set DataGrid1.DataSource = Adodc1
DataGrid1.Refresh
If Adodc1.Recordset.EOF Then
MsgBox "无此记录"
Text1.Text = ""
Exit Sub
End If
Text1.Text = ""
End If
在论坛上我看过很多模糊查询的例子,但依然不能用.是不是与查询时间有关系??"select * from 状态数据 where (时间 like '%" & (Text1.Text) & "%')"这个语句我也改变了很多格式,但是都不能达到要求,包括"%"和"*".
麻烦各们专家给看一下.谢谢~~急~~~~~~~~~~~~~~~
如一楼,三楼所说.我现在的时间字段所用的就是DATATIME类型.也就是说获取的是系统的时间如:2008-1-3 9:30:56 但是如果改为CHAR类型的话时间就成为 01 3 2008 9:30AM 用LIKE 语句的确是能够进行查询.LIKE不支持时间查询,有没有更好的办法.二楼的办法不可用.我试了. 展开
展开全部
首先 “时间”字段要是字符型的,最好你用varchar。
where 时间 like '%2005年01月12日%'
可以查出时间为:
2005年01月12日 10:30
但是查不出
2005年1月12日 10:30
所以你要注意格式问题
ーーーーーーーーーーーーーーーーーーーーーーー
你把数据库的字段datetime改为char时,数据库会自动转换类型,所以变成01 3 2008 9:30AM 不奇怪,你只要以后存的时候注意字符的格式就OK了。
比如:2008-01-04,年为四位,月、日均为两位,这样查询就可以用
where 日期>='2008-01-01' and 日期<='2008-01-10'
或
where 日期 between '2008-01-01' and 日期<='2008-01-10'
都可以查出2008年,1.1-1.10的数据
记住,日期采用字符的好处是便于以后的查询
如果你想查询2008年的数据便可以
where 日期 like '2008%'
如果你想查询2008年1月的数据便可以
where 日期 like '2008-01%'
当然你可以用datetime型,但是相对的你要记住常用的函数
如果你想查询2008年的数据便可以
where year(日期)=2008
如果你想查询2008年1月的数据便可以
where year(日期)=2008 and month(日期)=1
模糊查询,只能查字符串,查的是字符串的一部份。如在abcd123efg中查123
like '%123%'
不可能像你说的1月1号到1月10号,因为那样你要查10个字符串,如:
日期 like '%2008-01-01%' or 日期 like '%2008-01-02%' or ......
ーーーーーーーーーーーーーーーーーーーーーー
我之所以采用字符型作日期字段,是因为不同的数据库的日期字段设置不一,但是字符全是一样的。
所以你可以用datetime,但是相对的你要学会各种日期时间函数,如果你学会了,会发现比用字符串方便的。
但如果你换一个数据库,比如db2 access可以函数就不一样了。
所以每个人的喜好不一,你可以自己考虑有什么样的。
where 时间 like '%2005年01月12日%'
可以查出时间为:
2005年01月12日 10:30
但是查不出
2005年1月12日 10:30
所以你要注意格式问题
ーーーーーーーーーーーーーーーーーーーーーーー
你把数据库的字段datetime改为char时,数据库会自动转换类型,所以变成01 3 2008 9:30AM 不奇怪,你只要以后存的时候注意字符的格式就OK了。
比如:2008-01-04,年为四位,月、日均为两位,这样查询就可以用
where 日期>='2008-01-01' and 日期<='2008-01-10'
或
where 日期 between '2008-01-01' and 日期<='2008-01-10'
都可以查出2008年,1.1-1.10的数据
记住,日期采用字符的好处是便于以后的查询
如果你想查询2008年的数据便可以
where 日期 like '2008%'
如果你想查询2008年1月的数据便可以
where 日期 like '2008-01%'
当然你可以用datetime型,但是相对的你要记住常用的函数
如果你想查询2008年的数据便可以
where year(日期)=2008
如果你想查询2008年1月的数据便可以
where year(日期)=2008 and month(日期)=1
模糊查询,只能查字符串,查的是字符串的一部份。如在abcd123efg中查123
like '%123%'
不可能像你说的1月1号到1月10号,因为那样你要查10个字符串,如:
日期 like '%2008-01-01%' or 日期 like '%2008-01-02%' or ......
ーーーーーーーーーーーーーーーーーーーーーー
我之所以采用字符型作日期字段,是因为不同的数据库的日期字段设置不一,但是字符全是一样的。
所以你可以用datetime,但是相对的你要学会各种日期时间函数,如果你学会了,会发现比用字符串方便的。
但如果你换一个数据库,比如db2 access可以函数就不一样了。
所以每个人的喜好不一,你可以自己考虑有什么样的。
展开全部
首先,保证你的VB代码已经保证了用户按照你指定的格式输入。OK,如果你选用的是SQL SERVER或者ACCESS数据库的话,你可以按照我说的方式去做。
把用户输入到Text1里面的字符串拆分成年、月、日,转换成整数并分别保存到不同变量譬如:int_year,int_month,int_day.具体的拆分操作略去,你自己感受编程的乐趣 ^_^。
好啦,现在我们借助SQL内置函数来解决你的问题。year,month,day,这三个函数分别用来取数据库DATE类型字段的年月日,有了它们下面的就很简单了。你的SQL语句改写成如下形式:
“
'select * from 状态数据 where year(时间)=' & int_year & ' and month(时间)=' & int_month & 'and day(时间)=' & int_day
”
东西写到这里,自己去体验下吧^_^
把用户输入到Text1里面的字符串拆分成年、月、日,转换成整数并分别保存到不同变量譬如:int_year,int_month,int_day.具体的拆分操作略去,你自己感受编程的乐趣 ^_^。
好啦,现在我们借助SQL内置函数来解决你的问题。year,month,day,这三个函数分别用来取数据库DATE类型字段的年月日,有了它们下面的就很简单了。你的SQL语句改写成如下形式:
“
'select * from 状态数据 where year(时间)=' & int_year & ' and month(时间)=' & int_month & 'and day(时间)=' & int_day
”
东西写到这里,自己去体验下吧^_^
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
虚心学习中!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询