ORACLE 查询当天信息数问题
时间:2011-11-02
来源:互联网
表里有个时间字段,格式:2010-11-02 00:38:23,varchar2类型的。想写个sql查询下2010-11-02这天或是某一天的信息数,一直报错,invalid number。网上看了别人也是这么写的,都说没问题。
select * from t_acsrecord where to_char(accesstime,'yyyy-mm-dd') = to_char(sysdate,'yyyy-mm-dd')
(ORA-01722:invalid number)
select * from t_acsrecord where trunc(accesstime) = trunc(sysdate)
(ORA-00932:inconsistent datatypes:expected NUMBER got DATE)
应该是类型不匹配吧,哪位高人支支招啊
作者: yiyuanhong 发布时间: 2011-11-02
作者: opps_zhou 发布时间: 2011-11-02
accesstime 字段是什么类型的? date ?
varchar2的
作者: yiyuanhong 发布时间: 2011-11-02
accesstime 字段是什么类型的? date ?
varchar2的
作者: yiyuanhong 发布时间: 2011-11-02
SQL code
select * from t_acsrecord where to_date(accesstime,'yyyy-mm-dd hh24:mi:ss') = to_date(sysdate,'yyyy-mm-dd hh24:mi:ss')
或者这样:
SQL code
select * from t_acsrecord where trunc(to_date(accesstime,'yyyy-mm-dd hh24:mi:ss')) = trunc(sysdate)
作者: wangliangffaflgh 发布时间: 2011-11-02
作者: funfenffun 发布时间: 2011-11-02
可以这样:
SQL code
select * from t_acsrecord
where
to_date(accesstime,'yyyy-mm-dd hh24:mi:ss') =
to_date(sysdate,'yyyy-mm-dd hh24:mi:ss')
或者这样:
SQL code
select * from t_acsrecor……
还是有错。。。ORA-01861:literal does not match format string
作者: yiyuanhong 发布时间: 2011-11-02
where
trunc(to_date(accesstime,'yyyy-mm-dd hh24:mi:ss'),'dd') =
trunc(sysdate,'dd')
作者: zxf261 发布时间: 2011-11-02
引用 1 楼 opps_zhou 的回复:
accesstime 字段是什么类型的? date ?
varchar2的
作者: opps_zhou 发布时间: 2011-11-02
varchar2 类型,就不需要 to_char(accesstime) 了,直接 accesstime = to_char(sysdate,'yyyy-mm-dd')
引用 2 楼 yiyuanhong 的回复:
引用 1 楼 opps_zhou 的回复:
accesstime 字段是什么类型的? date ?
varchar2的
恩,确实是,但是accesstime还是要截取过的,不然取不到数据了
作者: yiyuanhong 发布时间: 2011-11-02
select * from t_acsrecord
where
trunc(to_date(accesstime,'yyyy-mm-dd hh24:mi:ss'),'dd') =
trunc(sysdate,'dd')
我这个还不行?
作者: zxf261 发布时间: 2011-11-02
引用 7 楼 zxf261 的回复:
select * from t_acsrecord
where
trunc(to_date(accesstime,'yyyy-mm-dd hh24:mi:ss'),'dd') =
trunc(sysdate,'dd')
我这个还不行?
当试了,可以的。很感谢,可是想问一下,还有没有简单一点的办法,这样转来专去,效率会不会很低啊?
我也是个菜鸟,还需要好好多学点啊
作者: yiyuanhong 发布时间: 2011-11-02
如果accesstime列上建了索引的话使用函数会使索引失效.所以可以使用下面的方式查询
SQL code
SELECT * FROM t_acsrecord WHERE accesstime >= TO_CHAR (TRUNC (SYSDATE), 'yyyy-mm-dd hh24:mi:ss') AND accesstime < TO_CHAR (TRUNC (SYSDATE + 1), 'yyyy-mm-dd hh24:mi:ss')
作者: tx2730 发布时间: 2011-11-02
lz说的对,效率很重要.
如果accesstime列上建了索引的话使用函数会使索引失效.所以可以使用下面的方式查询
SQL code
SELECT *
FROM t_acsrecord
WHERE accesstime >= TO_CHAR (TRUNC (SYSDATE), 'yyyy-mm-dd hh24:mi:ss')
AND accesstime < TO_……
恩,其实还要做一个整张表数量的查询,数据量打的话count(*)好像效率很低,网上有说建位图索引,看来要用您的方法试试看了
作者: yiyuanhong 发布时间: 2011-11-02
作者: tx2730 发布时间: 2011-11-02
位图索引是列的值区分度很小的时候才使用的,如员工表有十万条记录,其中省份列是记录员工省份的,中国的省份一共也才30多个,这样区分度小的列比较适合建位图索引.
这个。。。专业了,那弱弱的问一下,如我所说的情况,要计算一张中的记录总数,不考虑别的因素,百万级的数据,用什么方式比较合理?
作者: yiyuanhong 发布时间: 2011-11-02
lz说的对,效率很重要.
如果accesstime列上建了索引的话使用函数会使索引失效.所以可以使用下面的方式查询
SQL code
SELECT *
FROM t_acsrecord
WHERE accesstime >= TO_CHAR (TRUNC (SYSDATE), 'yyyy-mm-dd hh24:mi:ss')
AND accesstime < TO_……
额,发现个奇怪的问题,在PLSQL工具里面测试了下,语句没问题。不过放在eclipse IDE下时,那个小于号竟然报错了,大于等于倒是没问题
作者: yiyuanhong 发布时间: 2011-11-02
引用 12 楼 tx2730 的回复:
lz说的对,效率很重要.
如果accesstime列上建了索引的话使用函数会使索引失效.所以可以使用下面的方式查询
SQL code
SELECT *
FROM t_acsrecord
WHERE accesstime >= TO_CHAR (TRUNC (SYSDATE), 'yyyy-mm-dd hh24:mi:ss')
AND a……
不关sql语句的是,是ibatis的问题,我是小白,大大们莫怪啊
作者: yiyuanhong 发布时间: 2011-11-02
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28