扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
Oracle常用函数:
创新互联建站是专业的鹿城网站建设公司,鹿城接单;提供网站设计、网站制作,网页设计,网站设计,建网站,PHP网站建设等专业做网站服务;采用PHP框架,可快速的进行鹿城网站开发网页制作和功能扩展;专业做搜索引擎喜爱的网站,专业的做网站团队,希望更多企业前来合作!
Substr 截取函数
Distinct 去除重复函数
Having 一般与group by 公用的限制语句 他不与单个值有关而是与组有关
Inner join……on 内连接语句
Abs 取绝对值的函数 Select Asb(-100) from dual
mod 取余函数
sign 返回数的符号 正为1 0为0 负为-1
cell(n) 返回=n的最小整数 要求n必须是十进制的数
sort(n) 返回n的平方根 当n小于0是返回nan Power(n1,n2) 返回 n1的n2次幂 Exp(n) 返回e的n次幂
LOG(n1,n2) 返回以n1为底n2的对数 n1不为0,1 Ln(n) 返回n的自然对数 n不为 0,1
ASCII(char)返回参数首字母的ASCII码值
lengtch(char) 返回字符串char 的长度
substr(‘给定的字符串’,A,B) A表示从第几位开始截 B表示截几位,如果A为负值 从右边数到A位开始向后截B位
cast 数据类型转换函数
chartorowid 函数 将 char类型转换为ROWID 类型 但是最后长度必须满足rowid的标准18位
Rowidtochar 函数 将rowid 类型转换为char 因为rowid长度为18,故转换成的字符串也是18位。
to_char(number) 将数字类型转换成字符类型 To_char(data) 将日期转换成字符型
lnnvl (条件) 排除条件得到指定条件之外的函数
nvl(expr1,expr2) 如果expr1为null 则返回expr2 否则返回expr1
这2个函数是你说的意思没错,你是不理解为什么这么用吗?
我觉得这个函数和我理解的有点不一样。
for v_j in 2 ..sqrt(v_u) loop;应该是for v_j in 2 ..sqrt(v_i) loop;
v_u 应该是函数接收的一个参数,你说100它就给你前100内的素数,外层那个循环也应该是以v_u为上限的。
这个函数结构很简单,外层以2~100循环,很明显就是循环每个数字,内层就是用来检测v_i这个数字是不是素数。
内层循环就是由2~sqrt(v_i)逐个和v_i去mod,如果能整除,说明这个v_i不是素数,因为找到一个数能整除,然后把标志位v_flag置为0,内层循环完了,后面if v_flag = 1 then dbms_output.put_line(v_i);就是如果这个标志位还是1,没变化过,说明没找到过能整除v_i的数,也就是说这个数是素数。
至于内层循环循环为什么只要2~sqrt(v_i)就够了,这是个数学问题,我答不上来,反正就是这样,这个范围是严谨的,而且对于这种验证方法,平方根要省很多时间,我们验证97的时候肯定不用循环到96,也不用循环到一半,sqrt就够了。
oracle里,取余用的是 mod,而不是 %,另外还要去掉 begin,end,楼主刚从sql转oracle吧
if mod(v_n.numb,2)=0 then
null; update A set numb=2*v_n.numb;
else
update A set numb=v_n.numb;
end if;
接收字符返回字符或数值时可以使用dual伪表
1、把小写字符转换成大写
select supper(“smi”) form dual
2、把大写转换成小写
lower(“SMI”)
3、首字母大写
initcap(“smi”)
4、字符串的连接可以使用concat,也可以使用 建议使用
concat(“hello”“world”) 结果为helloworld
5、字符串的截取,使用substr,第一个参数为字符串,第二个参数是索引,第三个参数结束索引(开始索引使用0和1效果一样)
substr(hello,0,3) 结果为hel
6、获取字符串长度
length(“hello”)
7、字符串替换,第二个参数为被替换的字符串,第三个是替换的字符串
replace(“hello”,“l”,“x”) 结果为hexxo
1、四舍五入函数ROUND()
默认取整,可以指定保留位数
round(12.523) 结果为13
round(12.537,2) 结果为12.54
2、取整TRUNC
默认全部去掉小数,可以指定位数
trunc(12.789) 结果为12
3、取余数MOD
mod(10,3) 结果为1
oracle中提供了很多和日期相关的函数,包括日期的加减
日期 - 数字 =日期
日期 - 日期 = 数字(天)
1、如:查询员工进入公司的走数
(sysdate - 入职日期)/7
注:当前日期查询select sysdate form dual
2、查询所有员工进入公司的月数
获取两个时间段的月数使用months_between(sysdate,入职日期)
3、获取几个月后的日期:add_months()
如:获取员工三个月后的日期
add_months(sysdate,3)
4、如求出下星期一是什么时候
指定给出下次某日期数next_date()
next_date(sysdate,“星期一”)
5、求日期的最后一天last_day()
求出本月的最后一天
last_day(sysdate)
1、to_char字符串转换函数
如:将所有员工的入职日期的年、月分开
注:在划分时需要通配符
年:yyyy 月:mm 日:dd
时:HH 分:mi 秒:ss
定义时间格式
to_char(sysdate,“yyyy-mm-dd HH24:mi:ss”)
在10以下的月数前面会默认加上前导零,去除加上fm
to_char(sysdate,“fmyyyy-mm-dd HH24:mi:ss”)
to_char还可以给数字做格式化
如将员工的工资按三位“,”分隔
to_char(工资,“99,999”) 9代表数字
如果想在钱上加上国家符号
美元使用
中文使用l
to_char(工资,“99,999”)
to_char(工资,“l99,999”)
2、to_number数值转换函数,将字符串转换成数值
to_number(“10”) +to_number(“10”)
3、to_date日期转换函数,将字符串数据转换成日期类型
to_date(“1997-05-12”,“YYYY-mm-dd”) 1997/05/12
1、空值处理 nvl
如果在查询的时候存在空值的情况可以使用
nvl(comm,0) 当comm的列值为空时,用0代替
2、decode函数
该函数类似于if ...else if ...else
语法:decode(列名/值,search1,result1,search2,result2,default)
decode(中国,中国,我是中国,美国,我是美国,其他)
如果为中国返回我是中国,为美国返回我是美国,为其他字符则返回其他。
3、case when 与decode差不多
语法 case when city=中国 then 我是中国
when city=美国 then 我是美国
else 其他
取余数简单就是%,比如select
3%2
from
dual;
那么得到的结果就是1.
不过我没想明白,假如13-01的数据很大,12-01的数据很小,13-01的数据达到了12-01的二倍甚至更多呗,那么这个余数有什么意义呢?
你应该是想要减法吧。
取余数简单就是%,比如select 3%2 from dual;
那么得到的结果就是1.
不过我没想明白,假如13-01的数据很大,12-01的数据很小,13-01的数据达到了12-01的二倍甚至更多呗,那么这个余数有什么意义呢?
你应该是想要减法吧。
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流