好记性当不得烂笔头,把工作、学习中一点东西作个笔记...
Oracle10g(10.2.0)测试通过,mysql5.6
--字符过滤1
select translate('12c24b31a2321', '\1234567890', '\') "filter number", translate('12c24b31a2321', '\ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz', '\') "filter character", translate('12c24b31a2321!@#$%我的未来不是梦', '\ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789', '\') "filter number and character" from dual;
--字符过滤2
Select REGEXP_REPLACE('A1234aa我们,adb23','[[:digit:]]', '') "filter number",--任何数字 REGEXP_REPLACE('A1234aa我们,adb23','[[:alpha:]]', '') "filter character",--任何字母 REGEXP_REPLACE('A1234aa我们,adb23','[[:upper:]]', '') "filter en u character",--任何大写字母 REGEXP_REPLACE('A1234aa我们,adb23','[[:punct:]]', '') "filter en l character",--任何小写字母 REGEXP_REPLACE('A1234aa我们,adb23','[[:alnum:]]', '') "filter number and character",--任何字母和数字 REGEXP_REPLACE('A1234aa我们,adb23','[0-9a-fA-F]', '') "filter number and character" --任何英文字母和数字 FROM dual;
---过滤查询(也可插入数据)主要针对特殊字符
select * from tables_name where col1 like '%'||chr(37)||'%';--% select * from tables_name where col1 like '%'||chr(38)||'%';--& select * from tables_name where col1 like '%'||chr(39)||'%';--' select * from tables_name where col1 like '%'||chr(95)||'%';--_ select * from tables_name where col1 like '%^_%' escape '^';--_
---随机取5条数据
select * from (select * from scott.emp order by dbms_random.random) where rownum<6; select * from (select * from scott.emp sample(20));--[0.000001,100)百分比例取数
select * from scott.emp order by sys_guid();
--获得指定年之间的周末日期 当然每一个月就类推了
select * from (select decode(to_char(trunc(sysdate,'yyyy')+level-1,'d'),7, '周六',1,'周日',null) 星期几, trunc(sysdate,'yyyy')+level-1 当前日期 from dual connect by 1<=1 and level<=add_months(trunc(sysdate,'yyyy'),12)-1- trunc(sysdate,'yyyy')+1 )bbb where bbb.星期几 is not null;
---乘法口诀查询(*转)伪列的使用(www.itpub.net)
select reverse(ltrim((sys_connect_by_path( reverse( rownum|| 'X' || lv || '=' || lpad(rownum * lv, 2,'0')),' ') ))) "乘法口诀" from (select level lv from dual connect by level < 10) where lv = 1 connect by prior lv = lv+1;
---正则表达式简易实现分隔函数效果
select * from (select regexp_substr('abc,def,ghijkl,123,654','[^,]+',1,level) split from dual connect by level<10) where split is not null;
select substr('abcdef',rownum,1) split from dual connect by rownum<=length('abcdef');
select substr('a1,b22,c333,d4444,e,f', decode(rownum,1,1,instr('a1,b22,c333,d4444,e,f', ',', 1, rownum - 1) + 1), decode(rownum,length('a1,b22,c333,d4444,e,f') - length(replace('a1,b22,c333,d4444,e,f', ',', '')) + 1, length('a1,b22,c333,d4444,e,f') + 1, instr('a1,b22,c333,d4444,e,f', ',', 1, rownum)) - decode(rownum,1,1,instr('a1,b22,c333,d4444,e,f', ',', 1, rownum - 1) + 1)) split from t1 connect by rownum <= length('a1,b22,c333,d4444,e,f') - length(replace('a1,b22,c333,d4444,e,f', ',', '')) + 1;
----比较字符串是否相等,不考虑字符串顺序(保证字符串个数相等),存在BUG缺陷
create or replace function fn_checkString_equal(firstVar varchar2,secondVar varchar2) return varchar2 is v_temp varchar2(10); v_first number(10):=0; v_second number(10):=0; begin if nvl(length(firstVar),0)=0 or nvl(length(secondVar),0)=0 or nvl(length(firstVar),0)<>nvl(length(secondVar),0) then return 'false'; end if; for a in (select substr(firstVar,rownum,1) split from dual connect by rownum<=length(firstVar)) loop v_first:=v_first+ascii(a.split); end loop; for b in (select substr(secondVar,rownum,1) split from dual connect by rownum<=length(secondVar)) loop v_second:=v_second+ascii(b.split); end loop; if v_second = v_first then return 'true'; end if; return 'false'; exception when others then return 'false'; end fn_checkString_equal; select fn_checkString_equal('abcdefg','adcgfeb') from dual; true select fn_checkString_equal('r','1A') from dual; false select fn_checkString_equal('中华人民共和国','中华共和国人民') from dual; false
---上面函数例子存在漏洞,下面函数进行改进
create or replace function fn_checkString_equal2(firstVar varchar2,secondVar varchar2) return varchar2 is v_temp varchar2(10); v_first varchar2(1000):=''; v_second varchar2(1000):=''; begin if nvl(length(firstVar),0)=0 or nvl(length(secondVar),0)=0 or nvl(length(firstVar),0)<>nvl(length(secondVar),0) then return 'false'; end if; for a in (select substr(firstVar,rownum,1) split from dual connect by rownum<=length(firstVar) order by split) loop v_first:=v_first||a.split; end loop; for b in (select substr(secondVar,rownum,1) split from dual connect by rownum<=length(secondVar) order by split) loop v_second:=v_second||b.split; end loop; if v_second = v_first then return 'true'; end if; return 'false'; exception when others then return 'false'; end fn_checkString_equal2;
---进制转换例
---十六进制的转换到十进制 select to_number('abc','xxxx') from dual; ----十进制转换到十六进制 select to_char('2748','xxxx') from dual;
查找某一数据在某一个表中,登记一例作为引子,抛砖引玉(里面其实要考虑几个关键因素:数据类型,字段个数,字段之间分隔符的处理),作一函数如下:
create or replace function finddatafromtable(in_table_name varchar2,in_condition varchar2) return VARCHAR2 as tempsql varchar2(2000):='SELECT DECODE(sign(COUNT(*)),0,''false'',1,''true'') as flag FROM (SELECT '; resultStr varchar2(10):='false'; begin for column_cur in (select * from user_tab_columns where table_name=upper(in_table_name)) loop --data type deal with date varchar number IF column_cur.data_type='DATE' THEN tempsql:=tempsql||'to_char('||column_cur.column_name||',''yyyy-mm-dd'')'||'||'',''||'; ELSE tempsql:=tempsql||column_cur.column_name||'||'',''||'; END IF; end loop; tempsql:=tempsql||''''''; tempsql :=tempsql||' as larcol FROM '||in_table_name||') where 1=1 and larcol LIKE ''%'||in_condition||'%'''; dbms_output.put_line(tempsql); execute immediate tempsql into resultStr; return resultStr; exception when others then return 'false'; end;
---继续补充
select sysdate S1, --返回当前日期 时分秒 trunc(sysdate) S2, --返回当前日期 trunc(sysdate,'year') YEAR, --返回当前年的1月1日,无时分秒 trunc(sysdate,'month') MONTH , --返回当前月的1日,无时分秒 trunc(sysdate,'day') DAY, --返回当前星期的星期天,无时分秒 trunc(next_day(sysdate,7)) nSunday, --下一个最近星期天 trunc(last_day(sysdate)) cmlastday, --当前月的最后一天,无时分秒 floor(dbms_random.value(10,20)) Random, --随机产生10-20之间的数值 10<=a<20 add_months(trunc(sysdate,'year'),12) - floor(dbms_random.value(1, --随机获取当前年的任一天 (add_months(trunc(sysdate,'year'),12)- trunc(sysdate,'year')+1))) RandomDay, dbms_random.string('X',5) randomChar --随机产生5个数字及字符(X,U,L,P,A) from dual;
补充一点MYSQL的日期获取样例:
SELECT concat(date_format(LAST_DAY(now() - interval 1 month),'%Y-%m'),'-01'); ##上个月的第一天 SELECT date_format(LAST_DAY((concat(date_format(now(),'%Y-%m'),'-01')) - interval 1 day),'%Y-%m-%d'); ##上个月的最后一天 SELECT concat(date_format(now(),'%Y-%m'),'-01'); ##当前月的第一天 SELECT date_format(LAST_DAY(now()),'%Y-%m-%d'); ##当前月的最后一天 SELECT date_format(LAST_DAY(now()),'%Y-%m-%d') + INTERVAL 1 day; ##下个月的第一天 SELECT date_format(LAST_DAY(date_format(LAST_DAY(now()),'%Y-%m-%d') + INTERVAL 1 day),'%Y-%m-%d'); ##下个月的最后一天 SELECT concat(date_format(sysdate(),'%Y'),'-01-01'); ##当前年的第一天,也可以指定年度 SELECT concat(date_format(sysdate(),'%Y'),'-12-31'); ##当前年的最后一天,也可以指定年度 SELECT concat(year(sysdate()),'-01-01'); ##当前年的第一天,也可以指定年度 SELECT concat(year(sysdate()),'-12-31'); ##当前年的最后一天,也可以指定年度 SELECT TO_DAYS(concat(year(sysdate()),'-12-31')) - TO_DAYS(concat(year(sysdate()),'-01-01')) + 1;##计算年的天数 SELECT TO_DAYS(concat(year('2008-01-01'),'-12-31')) - TO_DAYS(concat(year('2008-01-01'),'-01-01')) + 1;##计算年的天数 select NOW(),DAYOFWEEK(sysdate()), DAYOFWEEK(sysdate() + INTERVAL 1 day); #6 7 2014-12-26 返回日期date是星期几(1=星期天,2=星期一,……7=星期六,ODBC标准) select NOW(),WEEKDAY(sysdate()), WEEKDAY(sysdate() + INTERVAL 1 day);# 4 5 2014-12-26 返回日期date是星期几(0=星期一,1=星期二,……6= 星期天)。
mysql关于年度周末获取的select 语句:
select date_,case dweek when 6 then '星期六' else '星期日' end "星期几" from (select ret1.*, DAYOFWEEK(ret1.date_) dweek from ( select (concat(year(sysdate()),'-01-01') + INTERVAL (r_-1) day ) date_,r_ from ( select table_name,@rownum:=@rownum+1 r_,days from (select * from information_schema.`COLUMNS` ) c, (select (TO_DAYS(concat(year(sysdate()),'-12-31')) - TO_DAYS(concat(year(sysdate()),'-01-01')) + 1) as days, @rownum:=0) a ) ret where r_<=days) ret1) ret2 where dweek in (6,7);
mysql父子节点查询(通过调用自定义函数)
select FIND_IN_SET(id ,getTreeList(1)),a.* from LG_PRODUCT_CATEGORY a where FIND_IN_SET(id ,getTreeList(1)); select id,PARENT_ID,NAME_EN,NAME_TC from LG_PRODUCT_CATEGORY where PARENT_ID=1 select * from LG_PRODUCT_CATEGORY where PARENT_ID=1 drop FUNCTION `getTreeList`; CREATE FUNCTION `getTreeList`(rootId INT) RETURNS varchar(2000) BEGIN DECLARE sTemp VARCHAR(2000); DECLARE sTempChd VARCHAR(1000); SET sTemp = '$'; SET sTempChd =cast(rootId as CHAR); WHILE sTempChd is not null DO SET sTemp = concat(sTemp,',',sTempChd); SELECT group_concat(id) INTO sTempChd FROM LG_PRODUCT_CATEGORY where FIND_IN_SET(parent_id,sTempChd)>0; END WHILE; RETURN sTemp; END
相关推荐
### Oracle学习笔记知识点详解 #### 一、Oracle简介 Oracle是一家知名的软件公司,以其数据库管理系统闻名全球。该公司成立于1977年,总部位于美国加利福尼亚州。Oracle不仅提供数据库解决方案,还涉及中间件、...
- **MySQL**: 开源数据库,特别适合Web应用。 - **DB2**: IBM的产品,支持多种平台,被广泛应用于大型企业和金融领域。 - **Oracle**: 全球最大的企业级数据库供应商之一。 ### Oracle系统管理工具 - **SQLPlus**: ...
1. DBMS(数据库管理系统):是用于创建、操作和管理数据库的软件,如MySQL、Oracle、SQL Server等。 2. DB(数据库):是通过DBMS存储和管理的一系列有组织的数据集合。 3. SQL:是用于与数据库进行交互的标准化...
Oracle学习笔记(索引),有具体的代码案例,创建索引,删除索引,重建索引等等
### Oracle韩顺平笔记知识点概览 #### 第一章:Oracle基础介绍 ##### 第一节:Oracle的安装和启动 1. **数据库分类与选择**:数据库根据负载量、成本和安全需求分为小型(如Access、Foxbase)、中型(如MySQL、...
【标题】:“Linux MySQL Oracle 笔记资料” 这篇笔记资料主要涵盖了Linux操作系统、MySQL数据库以及Oracle数据库相关的知识,是IT从业者提升技术能力的重要参考资料。它包括了从基础操作到高级应用的各种主题,...
通过这份“Oracle-MySQL笔记整理资料”,初学者将能够逐步掌握这两种数据库的基础知识,为后续的数据库管理、开发和运维工作奠定坚实基础。实践中不断操作、实验和解决问题,将是加深理解和提高技能的关键。
这篇史上最全的Oracle笔记将为你提供全面的学习指导。 一、数据库基础 数据库(DataBase)是存储数据的系统,Oracle数据库允许用户以表格的形式组织和管理数据。在Oracle中,数据主要以表的形式存在,表是数据库中...
Oracle、SQL Server和MySQL是三种广泛应用的关系型数据库管理系统(RDBMS),它们在数据管理、查询语法和功能上存在一些差异。以下是对这些系统的对比,主要关注它们在操作数据库结构方面的命令。 1. **查看表结构*...
黑马MySQL数据库笔记 MySQL数据库笔记是黑马程序员编写的数据库笔记,涵盖了数据库语句的介绍、数据库操作等优秀的操作,旨在帮助读者更好地理解数据库基础。下面是笔记的详细介绍: 数据库介绍 在了解 MySQL ...
Oracle 和 MySQL 是两种广泛使用的数据库管理系统,它们在数据存储、查询和管理方面有着各自的特点和优势。本笔记将深入探讨这两个系统的关键知识点,包括事务处理、游标、存储过程以及MySQL的分页技术和PL/SQL编程...
### MySQL核心技术学习笔记 #### 一、为什么要学习数据库 学习数据库的重要性主要体现在以下几个方面: 1. **持久化数据到本地**:数据库能够将应用程序产生的数据持久化存储在磁盘上,即使系统重启也不会丢失...
- **查询所有表名**: 相当于MySQL中的 `SHOW TABLES;` - **SELECT语句执行顺序**: 先执行 `WHERE` 子句,然后是 `GROUP BY` 和 `HAVING` 子句,最后是 `ORDER BY` 子句。 - **修改管理员权限**: - 首先以超级管理员...
SQLServer、MySQL和Oracle是三大主流的关系型数据库管理系统(RDBMS),广泛应用于企业级的数据存储和管理。这篇笔记集合涵盖了这三种数据库的关键知识点,帮助我们深入理解和掌握它们的使用。 1. **SQLServer**: ...
通过"Sqlserver、Oracle和Mysql学习笔记"这个压缩包文件,你将能够深入学习它们的语法、操作和最佳实践,进一步提高你在数据库领域的专业素养。文件名"Kwan1117"可能是笔记作者的标识或者特定章节的代码,具体内容需...
### Oracle课堂笔记知识点总结 #### Oracle数据库概述 - **Oracle** 是一款由Oracle公司开发的关系型数据库管理系统(RDBMS)。自Oracle 8版本开始,它支持互联网技术,并且不断推出新版本,如Oracle 8i(Internet...
RDBMS的种类繁多,如SQL Server、MySQL、Oracle、DB2等,它们都支持SQL(结构化查询语言),其中包括DML(数据管理语言)操作如SELECT、INSERT、UPDATE和DELETE。 在Oracle中,INSERT语句用于向表中插入新记录,有...
MySQL是一种开源、免费的SQL数据库,由瑞典的MySQL AB公司开发,目前被Oracle公司所拥有。它支持多种操作系统,包括Windows、Linux、Unix等,并且能够处理大量数据,提供高速数据访问。 在“MySQL学习笔记”中,...
Oracle SQL(在本笔记中使用的是Oracle 9i 9.2.0.1.0版本)是用于管理和查询Oracle数据库的标准语言。它主要由以下几个部分组成: 1. **DDL (Data Definition Language)**:数据定义语言,用于创建、修改和删除...
韩顺平oracle学习笔记 第0讲:如何学习oracle 一、如何学习oracle Oracle目前最流行的数据库之一,功能强大,性能卓越。学习oracle需要具备一定基础: 1.学习过一门编程语言(如:java ,c) 2.最好学习过一门别的...