Oracle开发常见点

0、获取出现的位置--instr()函数
      string2 的值要在string1中查找,是从start_position给出的数值(即:位置)开始在string1检索,检索第nth_appearance(几)次出现string2。
格式一
instr( string1, string2 )    --instr(源字符串, 目标字符串)

格式二

instr( string1, string2 [, start_position [, nth_appearance ] ] )  --instr(源字符串, 目标字符串, 起始位置, 匹配序号)
1、查询两个日期之间的天数
      简单来说就是计算两个日期之间的天数
SELECT ABS(TO_DATE('2017-08-24','YYYY-MM-DD') - TO_DATE('2017-08-25','YYYY-MM-DD')) FROM DUAL
2、查看表结构
      可了解表的具体组成
SELECT * FROM cols WHERE TABLE_name=upper('表名');
3、依据部分表名模糊查表
      数据库中有成百上千的表,忘记了表的全称,可依据所记忆的部分表名在整个数据库中进行模糊查找(注意:Part_Table_Name区分大小写)
SELECT table_name,tablespace_name FROM user_tables  WHERE table_name like '%Part_Table_Name%' 
4、数据计算时:除数为0时解决方案
      当数据库中查询到的数据作为除数并且为0时,执行SQL会报出“ORA:01476除数不能为0” 的错误,例如:SPEED=总TOTAL_DISTANCE/TIME 如果时间为0就没法玩了,所以可以采取以下方法(若TIME为0,SPEED就为0)
SPEED = DECODE(TIME,0,0, TOTAL_DISTANCE / TIME);
5、case选择函数
      运用在数据库SQL选择条件比较多时
COUNT (CASE WHEN csd.codingst_code LIKE '10%' THEN 1 ELSE NULL END) OTHER,   --其它
6、去除小数点后没用的0
      有的时候我们在数据库中会看到12.320000000,63.21012000。。。诸如此类的数据,是否感觉到*疼
RTRIM(TO_CHAR(v_number,'FM999,999,999,990.999999'),'.')
7、SQL查询去重
      数据库查询时只保留一个相同的数据(去重)
SELECT DISTINCT colName FROM tableName; --去除多余重复字段
SELECT DISTINCT colName1||colName2||colName3  FROM tableName; --多重去重
8、**** join
      各种连接
inner join  --在两张表进行连接查询时,只保留两张表中完全匹配的结果集。
left join   --在两张表进行连接查询时,会返回左表所有的行,即使在右表中没有匹配的记录。
right join  --在两张表进行连接查询时,会返回右表所有的行,即使在左表中没有匹配的记录。
full join  --在两张表进行连接查询时,返回左表和右表中所有没有匹配的行。
9、未完,待续。。。

猜你喜欢

转载自blog.csdn.net/GJ454221763/article/details/84866810