sql语句 时间段查询 高分

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql语句 时间段查询 高分相关的知识,希望对你有一定的参考价值。

sql server数据库里有表名recordtime, 里面有一列gettime为打卡时间列,格式为2008-10-10 8:00:00:000
现在想要根据一个时间段查询打卡记录,例如 ,我想查询2009-11-3到2009-12-3之间,8点到9点所有的打卡记录。
要求 输入日期,分别为“开始日期”和“结束日期”输入日期后,点查询按钮,即可查询开始日期到结束日期,8点到9点的所有打卡记录。
注:具体几点时间可以不用输入,直接在sql里。
非常想学习sql,希望大家多帮帮忙,本人会继续提升悬赏。谢谢大家。
本人是用asp开发的web程序。谢谢大家。
希望有个完整回答,谢谢

sql语句如下:
select 打卡记录 from recordtime
where (gettime>='开始时间' and gettime<='结束时间' )
and
(DATEPART(hh, gettime)>=8 and DATEPART(hh, gettime)<=9)
其中:打卡记录,是你具体要查询的信息的表中的字段,每个字段用逗号分隔,强烈建议你不要用“*”号
开始时间和结束时间即是WEB页面传进来的日期
我多加了两对括号只是便于理解
注意SQL语句中的所有的符合都要是英文输入法中的字符
参考技术A select * from recordtime where gettime>='开始时间' and gettime<='结束时间' and DATEPART(hh, gettime)>=8 and DATEPART(hh, gettime)<=9 参考技术B 假设开始的时间是begintiem,结束的时间是endtime
select * from recordtime where gettime>beginTime and gettime<endtime;
如:
select * from recordtime where gettime>'2009-11-3'and gettime<'2009-12-3';
而你begintime和endtime可以从界面取得然后传到sql语句中,你试试看吧!
祝你成功。。。
人家是sqlserver,而你写的是oracle,数据库错了!
参考技术C select count(*) from recordtime t where t.gettime between to_date('2009-11-3','yyyy-mm-dd')and to_date('2009-12-3','yyyy-mm-dd')

现在要查询一个字段至少包括两个中文字,高分急求SQL语句,谢谢~~~

分数后来补充,只要能回答这个问题,我加70分,一共100分。谢谢!!重谢!!

select * from table where patindex('%[吖-座]%',字段) > 0

--[吖-座]是中文字符集第一个到最后一个的范围
这个是判断是否有中文追问

这边咋会报错啊。。PATINDEX invalid identifier 是不是函数名打错了。不会是你写的函数吧。。。

追答

patindex('%[吖-座]%',字段名)>0

SQL中 patindex函数的用法 2011-01-11 15:04:05| 分类: SQL语法 | 标签: |字号大中小 订阅 .

patindex函数的用法
语法格式:PATINDEX ( '%pattern%' , expression )
返回pattern字符串在表达式expression里第一次出现的位置,起始值从1开始算。

pattern字符串在expression表达式里没找就返回0,对所有有效的文本和字符串就是有效的数据类型。

描述一下此函数的具体用法:

貌似没错啊

追问

对了,大哥,我忘了说了,我有的是ORACLE,你用的数据库是?

追答

Oracle里面如何识别存储字段里面是否存在中文,方法有二:

1、使用length和lengthb,如果中文的话length是一个字符,但是lengthb是两个字节。但是这个方法不适合数据库字符集非gbk的情况。
select * from t where length(c1) != lengthb(c1);

2、使用asciistr函数得出是否字段里面包含“/”,因为当中文字符转换为ascii后,变成“/FFFD/FFFD”,但是需要注意一个特殊字符“/”,当它出现的时候转换后的码为“/005C”

SQL> select asciistr('//)(-=!@#$%^&*~中文字符') from dual;

ASCIISTR('//)(-=!@#$%^&*~中文字符')
-----------------------------------------------------------
//005C)(-=!@#$%^&*~/FFFD/FFFD/FFFD/FFFD/FFFD/FFFD/FFFD/FFFD

追问

这个页面我也在网上搜索到了,但是两种方法都不行。因为length != lengthb 不能说明这个字符就是汉字,也可能是全角符,也可能是日文,等等等。还是得按汉字编码来。。。patindex 这个函数ORACLE里确实没有,这是哪个数据库中的函数?SQL SERVER?

追答

sql 的 23.模糊子串的位置 --返回2,参数去掉中间%则返回7
S:select patindex('%d%q%','sdsfasdqe') value
O:oracle没发现,但是instr可以通过第四霾问刂瞥鱿执问?BR> select INSTR('sdsfasdqe','sd',1,2) value from dual 返回6

你看看这个行不

追问

这个不行,因为instr不能用这样的形式:[吖-座],只能给定子字符串然后到母字符串中去找,而不是匹配中文。很感谢您的耐心回答,真心的感谢。

追答

.....

参考技术A select * from biao where ziduan like '%汉字1%汉字2%' or ziduan like '%汉字2%汉字1%' ?追问

不是,只要这个字段里面有两个中文字就行,不管是什么中文字(当然不包括全角符)

追答

那就要写函数了,挺麻烦的

追问

悲剧了…… SQL里面能用正则表达式么?正则表达式能否实现这样的功能?(非常感谢您能耐心地回答我的问题,O(∩_∩)O~)

我开始是这样想的:
select length('my name is 我是一只鱼 fish') from dual; --计算得字符数为:21
select lengthb('my name is 我是一只鱼 fish') from dual; --计算得字节数为:26
相差5,正好就是中文字的个数,但是后来发现不行。。。中文的全角符也是两个字节。哎!!

以上是关于sql语句 时间段查询 高分的主要内容,如果未能解决你的问题,请参考以下文章

现在要查询一个字段至少包括两个中文字,高分急求SQL语句,谢谢~~~

查询每门课成绩最高分的同学的sql语句,输出课程名,姓名,学号,分数。表的结构如下。写出完整的sql语句

sql语句帮助(高分悬赏)

试写一个SQL语句,查询出各科成绩最高分的同学(包括学生号,科目与成绩)

1查询成绩表的总分数,平均分,最低分和最高分。用sql语句怎么写

sqlserver2000 如何提高分页查询大数据量的效率