扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
select 12.23-ceil(12.23) from dual
成都创新互联公司成立于2013年,我们提供高端重庆网站建设公司、重庆网站制作、网站设计、网站定制、全网整合营销推广、微信小程序、微信公众号开发、成都网站推广服务,提供专业营销思路、内容策划、视觉设计、程序开发来完成项目落地,为混凝土搅拌机企业提供源源不断的流量和订单咨询。
--结果 -0.77
select substr(12.23-floor(12.23),2,10) from dual;
--这个东西做不到通用没什么价值
--如果
select substr(12.231111111111111-floor(12.231111111111111),2,10) from dual;
--结果不会是231111111111111,而是2311111111
select ltrim(0.55523-floor(0.55523),'0.') from dual;
--这个比较有代表性
--1
select substr(12.25,instr(12.25,'.')+1,length(12.25)) from dual;
--结果 25
--2
select A.a*power(10,length(A.a)-1) from
(select trunc(12.25333,length(12.25333))-trunc(12.25333,0) a from dual) A
--结果 25333
--方法很多的,看你想怎么个实现方法。最好做成函数,通用一点。
oracle to_char(小数) 默认如此 oracle就是这样的
to_char用法本身也是需要格式化的,只不过我们平时对于普通字符都是直接to_char而已,对于时间,钱币等都是需要格式化的,对于小数不格式化就是没有前面的零的,可以这样格式化
select to_char(0.1,'fm9999990.9999') from dual;
select to_char(0.338,'fm9999999990.00') from dual;
结果:0.34
这里重点要看 fm9999999999.99,表示整数部分最多10位,小数部分2位,fm表示去掉转位字符串后前面的空格,不加fm,0.34前面会有空格的.
有时候想在数据库中存储插入数据时的时间,比如有一条评论,我想在把评论内容存入数据库的时候把存储评论时的时间也存到数据库中。当然这个过程是自动完成的,即不需要我在业务逻辑代码中还得初始化一个Date对象然后再把这个Date对象转换为某种格式存到数据库中。
Oracle提供了时间戳数据类型Timestamp来支持这个操作。当一个字段定义成Timestamp类型时,通过在insert语句中指定value为Sysdate就可以将执行insert语句时的时间存入数据库中。例如:
然后执行查询:
Select commenttime From webcomments;
结果显示commenttime 列的值是这种样子的:18-4月 -10 03.31.06.000000 下午
这和我们的预想不太相符。我们想查询出来的时间应该是这个样子的:2010-04-18 13:10:57
这要是用to_char函数,利用它我们可以把一个日期数据转换为任何我们想要的格式。例如这样写select语句:
得到的结果是2010-04-18 15:31:06
要了解的一点是:如果单单是想存储时间的话,Oracle还提供了一种日期类型Date,使用它也可以存储插入数据时的时间,只要插入数据时也赋值为 Sysdate就可以。并且在查询时也一样可以使用to_char函数得到想要的格式。那问题就是:为什么我们要使用Timestamp类型呢?
date和Timestamp都是对日期和时间的表示,只是两种类型的精确度不同,前者精确到秒,后者精确到小数秒Timestamp数据的格式化显示和 Date数据一样。注意,to_char函数支持Date和Timestamp,但是trunc却不支持Timestamp数据类型。这已经清楚表明了在当两个时间的差别极度重要的情况下,使用Timestamp数据类型要比Date数据类型更确切。
并且:两个Date类型相减的结果是以“天”为单位的,而两个Timestamp类型相减的结果是直观的显示为“多少天+多少小时+多少分钟+多少秒+多少小数秒”。例如:
查询结果显示(多少天 多少小时 多少分钟 多少秒 多少小数秒 ):000000001 01:30:10.100000
最后,Date转换为Timestamp要使用CAST函数,例如:
sql中步骤获取当天时间的零点如下:
1、打开sqlserver数据库管理工具,点击“新建查询”,打开一个书写SQL语句的新窗口,输入sql语句,查询当前的数据库日期。
2、获取sqlserver中的最小日期,注意,这个日期的时间就是0点。
3、获取当前日期距离最小日期,经过了多少天。
4、 从sqlserver最小日期加上这个天数,就得到了当天的0点。
给你简单写个,不过到时候你得定义一个job自动调度(每小时执行),这里我就按你说的写个存储过程
先建立一个存储每个小时数据的表,就叫test吧,之前的你取数据的表叫test1
PROCEDURE SP_AUTO_HOUR
IS
v_time varchar2(10);
v_time1 varchar2(10);
begin
select to_char(sysdate-1/24,'yyyymmddhh24') into v_time from dual;
select to_char(sysdate,'yyyymmddhh24') into v_time1 from dual;
insert into test select * from test1 where to_char(time,'yyyymmddhh24') between v_time and v_time1;
commit;
end;
你这个完全不用考虑0点的问题,已经计算在内了,到时你可以试试,也可以手动执行一下
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流