
1、尽可能减少使用日期函数的次数,将尽可能多的计算放在SQL查询语句的where条件中进行,数据库每次调用函数都会有一定的开销,若函数使用的频率较高,这种开销将会极大。
2、尽量使用索引加快查询,对于索引字段调用日期函数,Oracle无法使用索引,建议在表设计时多考虑索引的选择。
3、使用特定的日期函数,如Oracle提供了一些日期函数,如trunc、add_months、extract等,可以根据实际需求选择将日期精确到哪一级,加以使用能大幅减小日期函数的计算量。
4、使用materializedview,通过预计算将查询计算的结果缓存起来,并且在数据变化时实时更新缓存中的数据,这样可以避免每次查询时都进行计算。
5、对于大规模数据,可以考虑使用分区表,将数据按照不同日期范围进行分区,以加快查询速度。
诶亚
看来我的贴几章书才行
1请总结为日期字段赋值的几种方式,并举例说明
oracle中有个到当前系统时间--sysdate,如:
select sysdate from dual
可对日期进行自述运算:
select (sysdate-mybirthday)/7 from person
months_between('01-sep-95','11-jan-94')---取得二个日期之间的间隔月数(196774194)
add_months('11-jan-94',6)---给指定日期加上指定的月份后得到一个新的日期(11-jul-94)
next_day('01-sep-85','friday')---取得当前日期中下个周五的日期(01-jul-95)
last_day('01-feb-95')---取得当前日期中月份的最后一天(28-feb-95)
round进行四舍五入,trunc则否,以下是我的 *** 作结果:
sysdate为:
SYSDATE
----------
28-7月 -06
select
round(sysdate,'month') RM,
round(sysdate,'year') RY,
trunc(sysdate,'month') TM,
trunc(sysdate,'year') TY
from dual;
RM RY TM TY
---------- ---------- ---------- ----------
01-8月 -06 01-1月 -07 01-7月 -06 01-1月 -06
2请总结select语句的几种用法,并举例说明
inner join
left join
right join
cross join (一般不允许用)
3请总结SQL *** 作符,每种 *** 作符各举一例说明
||字符串相加
>
<
=
Like
Between and
4请总结SQL单行函数,每个函数各举一例说明
越全面越好,
>字符处理
upper(str)---将字符串str全部转换成大写
lower(str)---将字符串str全部转换成小写
initcap(str)---将字符串中每个单词的首字母大写
concat(str1,str2)---将字符串str1与str2连接起来(也可以通过'||'号直接相连)
substr(str,a,b)---取字符串str中的指定字符,从位置a开始取长度为b的字符串,假如a为正则从左边开始,否则从右边开始
instr(str,'z')---取得str字符串中从左边开始每一次出现z字符的下标位置(下标从1开始)
lpad(str,12,'')---左填充,即将字符串str长度填充到12,假如其不足12位则在左边以号填充
rpad(str,12,'')---右填充,同上
length(str)---计算字符串str的长度
2>数字函数
round(45926,2)---将前一数保留指定的小数位,并四舍五入(4593),假如指定位是负数则意为在小数点左边保留指定位,如round(45923,-1)=50,rount(45923,0)=46,round(4593,-2)=0,round(5593,-2)=100
trunc(45926,2)---同上,得不四舍五入(4592)
mod(1600,300)---求余(100)
WHERE
TRUNC( 日期一, 'MM' ) = TRUNC( 日期二, 'MM' )
TRUNC 这里是做截尾的 *** 作, 只保留年月的部分
后面的部分被 清零了(设置为最小值, 因为 时分秒最小是0, 日期最小是 1)
Year:
yy two digits 两位年 显示值:07
yyy three digits 三位年 显示值:007
yyyy four digits 四位年 显示值:2007
Month:
mm number 两位月 显示值:11
mon abbreviated 字符集表示 显示值:11月,若是英文版,显示nov
month spelled out 字符集表示 显示值:11月,若是英文版,显示november
Day:
dd number 当月第几天 显示值:02
ddd number 当年第几天 显示值:02
dy abbreviated 当周第几天简写 显示值:星期五,若是英文版,显示fri
day spelled out 当周第几天全写 显示值:星期五,若是英文版,显示friday
处理月份天数不定的办法
select to_char(add_months(last_day(sysdate) +1, -2), 'yyyymmdd'),last_day(sysdate) from dual
找出今年的天数
select add_months(trunc(sysdate,'year'), 12) - trunc(sysdate,'year') from dual
闰年的处理方法
to_char( last_day( to_date('02' | | :year,'mmyyyy') ), 'dd' ) 如果是28就不是闰年
一年的第几天
select TO_CHAR(SYSDATE,'DDD'),sysdate from dual
查找月的第一天,最后一天
SELECT Trunc(Trunc(SYSDATE, 'MONTH') - 1, 'MONTH') First_Day_Last_Month,
Trunc(SYSDATE, 'MONTH') - 1 / 86400 Last_Day_Last_Month,
Trunc(SYSDATE, 'MONTH') First_Day_Cur_Month,
LAST_DAY(Trunc(SYSDATE, 'MONTH')) + 1 - 1 / 86400 Last_Day_Cur_Month
FROM dual;
1、安装oracle后,运行程序,输入用户名等信息登录。
2、下面演示sysdate的用法,这个是oracle独有的,取当前时间。
3、下面介绍to_char()函数的用法,将时间转化为特定的格式。
4、下面介绍一种将时间转化为汉字形式的时间格式及显示出星期。
5、下面演示to_date函数的使用方法,将字符串转换为标准的时间格式。
用to_char函数即可。
如emp表中数据如下:
要查询hiredate的日期为1981年1月1日到1981年5月1日之间的数据,可用如下语句:
select from emp where to_char(hiredate,'yyyy-mm-dd') between '1981-01-01' and '1981-05-01';查询结果:
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)