接收字符返回字符或数值时可以使用dual伪表
10年积累的成都网站设计、网站制作经验,可以快速应对客户对网站的新想法和需求。提供各种问题对应的解决方案。让选择我们的客户得到更好、更有力的网络服务。我虽然不认识你,你也不认识我。但先网站设计后付款的网站建设流程,更有正定免费网站建设让你可以放心的选择与我们合作。
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 其他
Oracle读取数据的最大限制取决于操作系统和Oracle对多块读IO的限制。在物理上来说,一个SQL语句要读取某个记录,必须将该记录读取到DB CACHE中,然后才能从DB CACHE中获取,这种访问我们一般称为物理读(READ),如果这个数据已经存在于DB CACHE中,那么前台进程可以直接从DB CACHE中读取数据,这样的读取成为逻辑读(GET),如果要读取的数据已经被修改,需要从UNDO中读取前映像来获取一致性的数据,那么会从UNDO中取出前映像,和当前的数据块一起形成一个一致性读块(CR BLOCK),然后再从CR BLOCK中读取数据,这种访问方式称为一致性读(CR GET)。 从逻辑上讲, Oracle读取数据通过三种途径:全表扫描( Full Table Sacn,FTS )、引扫描、通过ROWID直接访问。在阅读SQL执行计划的时候,可以通过 TABLE ACCESS子句来查看Oracle访问某个表的方法,一般来说,对于大型的表来说,如果出现 TABLE ACCESS FULL 的提示,是需要加以重视的,一般情况下,对于大表的全表扫描应该是尽量避免的。下面是一个简单的执行计划:Query Plan----------------------------------------- SELECT STATEMENT [CHOOSE] Cost=1234 TABLE ACCESS FULL LARGE [:Q65001] [ANALYZED]查看SQL的执行计划的时候,最右边的,最上面的操作是首先被执行的,上面的例子只有一个操作,就是对表“LARGE”进行全表扫描。当这个步骤执行完毕后,就会将结果集返回给上面一层的语句,上面的例子就是 SELECT STATEMENT 这个语句,一般来说 SELECT STATEMENT 是整个执行计划的顶层。 [CHOOSE]表明这个SQL语句的OPTIMIZER_GOAL ,在这个提示的右侧是COST数据,如果COST是有实际值的,那么说明使用了CBO优化器,如果COST没有实际值,那么说明使用了RBO优化器。比如: SELECT STATEMENT [CHOOSE] Cost=COST只是一个相对的值,只是优化器用来分析访问路径的优劣的,相同的SQL, COST越小的执行计划,起执行效果越好,开销越小。而不同的SQL ,其COST值是没有可比性的。 [:Q65001]指明这部分操作被采用并行查询的方式执行,
1、 在计算机中,打开Oracle的连接程序,用新建的数据库管理员,选择【SQL工作表】。
2、 接着,在【Oracle服务器】的窗口上,在输入窗口中输入SQL查询语句,并单击【执行】按钮,可以看到表格当前的数据。
3、 然后,在【SQL工作表】的窗口上,输入取子串函数的SQL语句,可以作为参考。
4、接着,在【SQL工作表】的窗口上,输入取子串函数的SQL语句,并单击【执行】按钮。
5、 然后,在【SQL工作表】的窗口上,可以看到表格显示的数据。
6、最后,在【SQL工作表】的窗口上,修改取子串函数的参数,执行SQL语句,就完成了。
如果Oracle版本不是太低的话,使用 正则表达式函数 REGEXP_SUBSTR 处理。\x0d\x0a\x0d\x0a5个参数\x0d\x0a第一个是输入的字符串\x0d\x0a第二个是正则表达式\x0d\x0a第三个是标识从第几个字符开始正则表达式匹配。(默认为1)\x0d\x0a第四个是标识第几个匹配组。(默认为1)\x0d\x0a第五个是是取值范围:\x0d\x0ai:大小写不敏感;\x0d\x0ac:大小写敏感;\x0d\x0an:点号 . 不匹配换行符号;\x0d\x0am:多行模式;\x0d\x0ax:扩展模式,忽略正则表达式中的空白字符。\x0d\x0a\x0d\x0aSQL SELECT\x0d\x0a 2 REGEXP_SUBSTR(a,'[0-9]+')\x0d\x0a 3 FROM\x0d\x0a 4 test_reg_substr\x0d\x0a 5 WHERE\x0d\x0a 6 REGEXP_LIKE(a, '[0-9]+');