Oracle
Oracle
IT_小赵
这个作者很懒,什么都没留下…
展开
-
Oracle提取字符串中的所有数字
需求:取出某个字符串中的所有数字,比如提取DATE格式字符串中的所有数字作为某种编号使用select regexp_replace('2020-11-22 08:02:11', '[^0-9]', '') from dual;感谢您的阅读,如有错误或不足之处,敬请批评指正!...原创 2021-01-23 15:29:45 · 4687 阅读 · 0 评论 -
Oracle中取出某个区间内的连续整数
需求:取出某个区间内的所有整数,比如10以内的,30-40之间的简单的实现如下,如果有更好的方式请不吝赐教:10以内的正整数:-- 10以内的所有正整数select level as seq from dual connect by level < 10;执行结果:31-40之间的所有正整数:-- 31 - 40之间的所有正整数select level as seq from dual where level > 30 connect by level <原创 2020-11-03 16:03:22 · 1028 阅读 · 0 评论 -
ORA-02046: distributed transaction already begun 分布式事务处理已经开始 - 解决方案
情景:在A库上将数据写到B库上,这个本来是很简单的问题,但由于要在B库上建表,A库只能通过调用B库的存储过程才能实现,就这样就报错了,错误如下:ORA-02046: distributed transaction already begunORA-02063: preceding line from dblink_name网上查到的原因大概是:没有及时关闭dblink(没查到确切的说法);解决方式:dbms_session.close_database_link('dblink_nam原创 2020-11-03 11:44:17 · 1661 阅读 · 0 评论 -
Oracle中的查询结果按照中文拼音进行排序
情景:按照中文名进行排序,直接“order by 中文名”时数据顺序和常规认知不一致(没有按拼音排序) 需求:按照中文拼音排序 说明:在oracle 9i之前,对中文的排序,是默认按2进制编码来进行排序的. 9i时增加了几种新的选择/* 按中文拼音进行排序 */select stu.name from student stuorder by nlssort(stu.name,'NLS_SORT = SCHINESE_PINYIN_M');/* 按中文首部进行排序 */s...原创 2020-07-30 10:31:46 · 888 阅读 · 0 评论 -
Oracle取某个时间点前后的整半小时的时间点
Oracle取某个时间点前后的整半小时的时间点:需求简述:例如考勤计算中,我们是以0.5小时为单位去计算考勤时数,则需要对上班时间向后取整,下班时间向前取整例如:上班时间:8:18,按8:30计算;下班时间17:58,按17:30计算。select sysdate as 当前时间, trunc(sysdate, 'hh24') + decode(sign(to_number(to_char(sysdate, 'mi')) - 30), 1, 1 / 48, 0)原创 2020-07-26 10:18:16 · 2001 阅读 · 0 评论 -
Oracle中单列取最大值,最小值和多列取最大值,最小值的方法
Oracle中单列取最大值,最小值和多列取最大值,最小值的方法:单列:select min(tb.grades) as 最低分,max(tb.grades) as 最高分 from ( select '张三' as 学生, 65 as grades from dual union select '李四' as 学生, 78 as grades from dual union原创 2020-07-26 09:55:53 · 5889 阅读 · 0 评论 -
Oracle中直接将字符串insert到某个clob类型的字段中时报错怎么解决?
情景描述: 今天遇到一段简单的 insert 语句报错,报错信息如下: ORA-22992: cannot use LOB locators selected from remote tables 查看发现是其中有一个要插入的字段类型是CLOB,insert ... select 里面是固定写死的一个字符串,比如:'这是一串字符串'...原创 2020-04-15 08:54:25 · 2142 阅读 · 0 评论 -
Oracle将小于1的小数用 to_char() 转化成字符串时,小数点前面的0消失不见的问题怎么解决?
举例:select to_char(0.13) as rtn from dual;很明显,这并不符合我们的需求!原因:to_char() 默认的格式去掉了小数点前面的0解决方式: 增加转换格式参数:select to_char(0.13,'fm9999990.9999') as rtn from dual感谢您的阅读,如有错误或不足之处,敬请...原创 2020-03-10 17:26:29 · 3988 阅读 · 3 评论 -
Oracle SQL中返回第一个值不为空的列的函数coalesce的用法
场景描述:比如我们在select某一个值的时候,要从多个列中按照先后顺序依次取值,直到取到第一个不为空的值,比较笨的方法是:select nvl(colmun1,nvl(colmun2,nvl(colmun3,nvl(colmun4,colmun5)))) from dual;这样写虽然可以达到目的,但是写起来很麻烦,可读性差,修改起来也比较麻烦提供一种便捷一些的写法,供参考:...原创 2020-02-14 11:01:51 · 4679 阅读 · 0 评论 -
Oracle SQL中 count(*) 和 count(栏位名) 的区别
举例:比如现在有一张表中存储了学生提交论文的记录如下:我们现在想要统计总的学生数量和已经提交了论文的学生数量,肉眼可以看出来分别是 7 和 5,那SQL应该怎么写呢?区别就在于:count(*) 表示统计所有的记录;count(st.sbmt_date) 表示只统计这个栏位中的值不为空的记录;具体写法视需求而定感谢您的阅读,如有错误或不足之处,敬请批评指正...原创 2019-12-19 11:24:54 · 523 阅读 · 0 评论 -
oracle sql 判断一个字符串中是否只含有数字或者筛选出不是纯数字的字符串
今天在执行一段查询SQL的时候报错,系统提示此错误: 经过排查,发现有一个参与减法计算的栏位在table中的类型是VARCHAR2(500),虽然搞不懂当初的设计意图,但是就经验而言,应该不会影响到正常计算,先确认一下问题点吧: 1.直接输出该栏位的值,肉眼看起来是OK的,都是数字,不过我一向不相信肉眼看出来的结果,所以还是直接判断一下到底有没有异常数据;...原创 2019-11-10 10:27:22 · 5504 阅读 · 0 评论 -
Oracle sql 分别获取当前时间(系统时间)的年月日时分秒数值
简单记录一个常用函数,用来提取当前时间(系统时间)的年月日时分秒数值select extract(year from systimestamp) as 年 ,extract(month from systimestamp) as 月 ,extract(day from systimestamp) ...原创 2019-10-24 09:22:23 · 2538 阅读 · 0 评论 -
oracle 中关于 union 和 union all 的不同作用简介
今天简单介绍一下union和union all的不同用法,仅供参考:先说一下 UNION 和 UNION ALL共同的使用规范:(1) 内部的每个 SELECT 语句必须拥有相同数量的列;(2)同一列也必须拥有相似的数据类型;(3) 每个 SELECT 语句中的列的顺序必须相同;另外:结果集中的列名总是等于 UNION或者 UNION ALL 中第一个 SELECT...原创 2019-06-18 09:48:07 · 1276 阅读 · 0 评论 -
oracle中 to_date() 如何取得毫秒
to_date如何取得毫秒?由于oracle中date类型只支持到秒,不支持到毫秒,所以to_date()不能取到毫秒。如果要取到毫秒,oracle 9i以上版本,可以使用timestamp类型,是date的扩展类型,能支持到毫秒,毫秒的显示精度是6位,不过有效位是3位,即最大值达到999,满1000ms就进为1s。而与to_date()对应的转换函数可以使用to_timestamp()。s...转载 2019-04-30 16:53:01 · 11375 阅读 · 0 评论 -
Python报错:ProgrammingError: LOB variable no longer valid after subsequent fetch
2019-05-21,在开发中遇到这样一个报错信息:ProgrammingError: LOB variable no longer valid after subsequent fetch经网上查找学习,发现是oracle中使用了wm_concat函数生成了一个长文本clob字段,cx_Oracle 读取数据时产生了报错,具体原理不太懂,但是使用to_char()函数处理之后,测试发...原创 2019-05-21 09:27:51 · 998 阅读 · 1 评论 -
Oracle按照某个含有数字的字符串类型的字段进行排序时,将10排在9的后面
开发中遇到的一个排序问题,简单记录一下解决方式,供参考,如有更合适更好的解决方法,欢迎指正本文所写内容主要是针对想要排序的字段是同时符合以下情况的:1.VARCHAR2等字符串类型2.该字段的值非纯数字,类似于字母序号+数字序号的3.字符的长度不一致的,比如有些会用0来填充,保持长度一致,也是不需要文中这样处理的,例如:A001,A002这样子如果排序字段不符合上述...原创 2019-05-22 10:17:11 · 6316 阅读 · 6 评论 -
Oracle中row_number()、rank()、dense_rank() 三种排序函数的区别
row_number的用途非常广泛,排序最好用它,它会为查询出来的每一行记录生成一个序号,依次排序且不会重复,注意使用row_number函数时必须要用over子句选择对某一列进行排序才能生成序号。rank函数用于返回结果集的分区内每行的排名,行的排名是相关行之前的排名数加一。简单来说rank函数就是对查询出来的记录进行排名,与row_number函数不同的是,rank函数考虑到了over子句...转载 2019-05-13 10:28:26 · 1398 阅读 · 0 评论 -
开发环境,如何恢复数据库中某张表里的数据?
本文所述操作只针对开发环境,仅供参考!正式的生产环境请慎重操作,选择更为安全可靠的方案,否则出现什么差错概不负责!!!建议先找一张测试表测试一下,注:两小时以上的数据基本无法恢复!--1.查询某时间点某个表中的数据是否还在,在的话才可以恢复Select * from 表名 as of TIMESTAMP to_timestamp('20190522130000','yyyymmdd ...原创 2019-05-22 13:09:50 · 636 阅读 · 0 评论 -
Oracle中根据日期范围进行查询,查询大于某一天的数据,查询小于某一天的数据
--大于等于某一天:select* from表名 where日期字段名 >= to_date(q'/2019-05-23 00:00:00/', 'yyyy-mm-dd hh24:mi:ss');--小于等于某一天:select * from表名 where 日期字段名 <= o_date(q'/2019-05-23 00:00:00/', 'yyyy-mm-...原创 2019-05-23 09:01:08 · 26257 阅读 · 0 评论 -
Oracle 中将数值处理成千分位形式显示
SELECT TO_CHAR('223344556677888.45','FM999,999,999,999,990.00') FROM DUAL原创 2019-06-06 11:56:23 · 11606 阅读 · 0 评论 -
SQL查询一个字符串的长度
在实际工作中,经常会遇到需要保存的字段长度大于了我们设定的该字段的最大长度,就会报错无法保存,这个时候可以输出一下该字符串的实际长度,验证一下是不是字段长度的问题select lengthb('测试语句长度') from dual...原创 2019-06-12 09:54:25 · 30975 阅读 · 0 评论 -
Oracle中查询某个字符的Ascii码值,查询某个Ascii码值对应的字符
有些时候,我们需要在查询出来的结果中添加一些符号,但是直接写符号又会被处理掉,不能正常显示,这个时候我们就可以用Ascii码值来处理一下,然后可以用这行语句来查询相应的Ascii码值或者对应的字符是什么select chr(39),chr(65),ascii('A') from dual;...原创 2019-06-12 10:23:20 · 3961 阅读 · 0 评论 -
oracle如何去除某个字段中的空格?
1. trim(字符串):删除字符串两边的空格;2. ltrim(字符串):删除字符串左边的空格;3. rtrim(字符串):删除字符串右边的空格;4. trim('字符串1' from '字符串2') :分别从字符串2的两边开始,删除指定的字符1;5. trim([leading | trailing | both] trim_char from string) 从字符串String中删...原创 2018-11-12 13:56:30 · 9263 阅读 · 0 评论