oracle 字符、数值、日期处理
- 格式:docx
- 大小:15.06 KB
- 文档页数:6
oraclenvl函数使用方法Oracle NVL函数是一种常用的函数,用于判断一个表达式是否为空,并根据判断结果返回不同的值。
如果表达式为空,NVL函数会返回一个指定的值或者NULL,如果表达式不为空,NVL函数会返回原始表达式的值。
语法:NVL(expr1,expr2)参数说明:- expr1: 需要判断是否为空的表达式。
- expr2: 当expr1为空时,返回的值。
备注:NVL函数可以用于任何数据类型,包括字符串、数值、日期等。
以下是几种常见的使用方法:1.使用NVL函数判断和处理NULL值有时候表中的一些列可能包含空值(NULL),在查询或使用这些列的时候,我们可以使用NVL函数来处理NULL值。
例如,我们从一个员工表(employees)查询员工的薪水,如果薪水为NULL,我们希望显示为0。
```SELECT NVL(salary, 0) AS salary FROM employees;```2.使用NVL函数处理字符串NVL函数可以被用于处理字符串。
当需要对一个可能为空的字符串做判断时,可以使用NVL函数来判断并返回默认值。
例如,我们希望查询员工的职位,如果职位为空,我们希望显示为'未知'。
```SELECT NVL(job, '未知') AS job FROM employees;```3.使用NVL函数处理日期同样的,NVL函数也可以被用于处理日期。
当需要对一个可能为空的日期做判断时,可以使用NVL函数来判断并返回默认日期。
例如,我们查询员工的入职日期,如果日期为空,我们希望显示为当前日期。
```SELECT NVL(hire_date, SYSDATE) AS hire_date FROM employees;```4.使用NVL函数在WHERE子句中过滤NULL值``````5.使用NVL函数对结果进行计算NVL函数也可以用于对结果进行计算。
oracle数据库基本数据类型
Oracle数据库有许多基本数据类型,包括:
1. 字符型:
- CHAR:固定长度的字符型,最长可达2000个字节。
- VARCHAR2:可变长度的字符型,最长可达4000字节。
- CLOB:用于存储大量文本数据的字符型,最长可达4GB。
- NCHAR:固定长度的Unicode字符型,最长可达2000个字节。
- NVARCHAR2:可变长度的Unicode字符型,最长可达4000字节。
- NCLOB:用于存储大量Unicode文本数据的字符型,最长可达4GB。
2. 数值型:
- NUMBER:用于存储数值数据的类型,包括整数和浮点数。
- BINARY_FLOAT:用于存储单精度浮点数。
- BINARY_DOUBLE:用于存储双精度浮点数。
3. 日期和时间型:
- DATE:用于存储日期和时间信息。
- TIMESTAMP:用于存储日期、时间和时区信息。
4. 二进制型:
- RAW:用于存储二进制数据的类型,最长可达2000字节。
- BLOB:用于存储大量二进制数据的类型,最长可达4GB。
5. BOOLEAN型:用于存储布尔值(TRUE或FALSE)。
这些基本数据类型可以通过组合和修饰符进行扩展和定制。
oracle中datediff函数的用法-回复Oracle中没有内置的DATEDIFF函数,但可以使用其他函数来实现类似的功能。
下面是一种常用的方法来计算两个日期之间的差异。
在Oracle中,我们可以使用日期函数来处理日期和时间。
其中一些常用的日期函数包括:TO_DATE,TO_CHAR,SYSDATE,ROUND等。
1. TO_DATE函数:将一个字符串转换为日期格式。
例如:TO_DATE('2022-01-01', 'YYYY-MM-DD') 返回日期值'2022-01-01'。
2. SYSDATE函数:返回当前日期和时间。
例如:SYSDATE 返回当前的系统日期和时间。
3. ROUND函数:对数值进行四舍五入。
例如:ROUND(3.14159, 2) 返回3.14。
现在,我们将使用这些函数来计算两个日期之间的差异。
步骤1:确定两个日期首先,确定要计算差异的两个日期。
假设我们要计算2022年1月1日和2025年12月31日之间的天数差异。
步骤2:将日期转换为标准格式使用TO_DATE函数将日期转换为标准格式。
例如:SELECT TO_DATE('2022-01-01', 'YYYY-MM-DD') AS start_date, TO_DATE('2025-12-31', 'YYYY-MM-DD') AS end_date FROM DUAL;这将返回以下结果:START_DATE END_DATE2022-01-01 2025-12-31步骤3:计算日期差异使用日期函数进行日期差异计算。
Oracle中,我们可以使用减法运算符(-)来计算两个日期之间的差异。
例如:SELECT TO_DATE('2025-12-31', 'YYYY-MM-DD') -TO_DATE('2022-01-01', 'YYYY-MM-DD') AS date_diffFROM DUAL;这将返回以下结果:DATE_DIFF1094这表示2022年1月1日和2025年12月31日之间有1094天的差异。
Oracle的数据类型一、概述在Oracle数据库中,数据类型是定义列或变量的属性,用于存储不同类型的数据。
数据类型在数据库设计和数据存储过程中起着关键的作用。
Oracle提供了丰富的数据类型,包括数值类型、字符类型、日期类型、大对象类型等。
本文将详细介绍Oracle的各种数据类型及其特点。
二、数值类型1. NUMBERNUMBER是Oracle中最常用的数值类型。
它可以存储任意精度的数值,包括整数和小数。
以下是一些常见的NUMBER类型的子类型:•NUMBER(precision): 存储精度为precision的数值。
•NUMBER(precision, scale): 存储精度为precision且小数位数为scale的数值。
2. INTEGERINTEGER是一种整数类型,它只能存储整数值。
它可以使用以下子类型:•INTEGER(precision): 存储精度为precision的整数值。
3. BINARY_FLOAT和BINARY_DOUBLEBINARY_FLOAT和BINARY_DOUBLE是用于存储浮点数的数据类型。
BINARY_FLOAT用于单精度浮点数,BINARY_DOUBLE用于双精度浮点数。
1. CHARCHAR是一种定长字符类型,它可以存储固定长度的字符串。
在创建CHAR类型的列或变量时,必须指定长度。
2. VARCHAR2VARCHAR2是一种可变长度字符类型,它可以存储可变长度的字符串。
在创建VARCHAR2类型的列或变量时,必须指定最大长度。
3. CLOBCLOB是用于存储大文本对象的数据类型。
它可以存储最大长度为4GB的文本数据。
四、日期类型1. DATEDATE是Oracle中用于存储日期和时间的数据类型。
它存储的范围从公元前4712年到公元9999年。
2. TIMESTAMPTIMESTAMP用于存储日期和时间,精确到纳秒级别。
它包括以下子类型:•TIMESTAMP: 存储日期和时间,精确到秒级别。
oracle常用运算表达式1.Oracle数据库是一种关系型数据库管理系统(RDBMS),广泛应用于企业级应用中。
在数据库查询和数据处理中,使用运算表达式是非常常见的操作。
本文将介绍一些在Oracle中常用的运算表达式,包括数学运算、字符串操作、日期运算等,帮助读者更好地理解和使用Oracle 数据库。
2. 数学运算2.1. 加法(+)加法运算是最基本的数学运算之一,在Oracle中使用加号进行相加操作。
sqlSELECT salary +bonus AS total_incomeFROM employees;2.2. 减法(-)减法运算用于计算两个数值的差。
sqlSELECT total_sales -expenses AS net_profitFROM financial_data;2.3. 乘法(*)乘法运算用于计算两个数值的乘积。
sqlSELECT quantity *unit_price AS total_costFROM orders;2.4. 除法(/)除法运算用于计算两个数值的商。
sqlSELECT revenue /number_of_customers AS average_revenue_per_customer FROM sales_data;2.5. 取余(MOD)取余运算返回两个数相除的余数。
sqlSELECT MOD(total_items, 5) AS remainderFROM inventory;3. 字符串操作3.1. 字符串连接(||)字符串连接运算符用于将两个字符串连接在一起。
sqlSELECT first_name ||' '||last_name AS full_nameFROM employees;3.2. 字符串截取(SUBSTR)SUBSTR函数用于从字符串中截取指定长度的子串。
sqlSELECT SUBSTR(product_name, 1, 3) AS short_nameFROM products;3.3. 字符串长度(LENGTH)LENGTH函数返回字符串的长度。
oracle 数据库解析字段与解析内容详解文章标题:深度解析Oracle数据库中的字段解析与内容详解在Oracle数据库中,字段解析和内容详解是数据库设计和优化中极为重要的部分。
本文将从简单到复杂地分析这一主题,并通过多个方面全面评估,以帮助读者更深入地理解这一概念。
一、字段解析的概念和作用在数据库中,字段解析是指对于各种数据类型的字段进行分析和解释。
不同的数据类型有不同的解析方式,而正确的字段解析能够帮助数据库管理员和开发人员更好地理解和利用数据。
Oracle数据库中常见的字段类型包括数值型、字符型、日期型等,它们的解析方法会对数据的存储、查找和计算产生影响。
1. 数值型字段解析数值型字段的解析主要涉及数据的精度和范围,以及相关的计算规则和函数。
对于整型和浮点型数据,需要考虑到数据的取值范围和小数位数,以及在应用中可能出现的四舍五入或溢出问题。
2. 字符型字段解析字符型字段的解析涉及到字符编码、长度限制、字符集规则等方面。
在处理多语言和特殊字符时,正确的解析能够保证数据的完整性和可读性,同时也对数据的存储和索引产生影响。
3. 日期型字段解析日期型字段的解析需要考虑到日期格式、时区、日期运算等方面。
在数据分析和报表生成中,正确解析日期字段能够保证数据的一致性和准确性。
二、内容详解的重要性和实践方法除了字段解析外,内容详解也是数据库设计和优化中不可或缺的部分。
内容详解是对数据内容进行深入的分析和理解,包括数据的来源、意义、关联等方面。
通过内容详解,可以更好地发现数据的价值和潜在问题,为决策和业务分析提供支持。
1. 数据来源和质量在进行内容详解时,需要了解数据的来源,包括数据的采集、清洗、转换等过程。
同时也需要评估数据的质量,包括数据的完整性、一致性、准确性等方面。
2. 数据关联和分析内容详解还涉及到数据之间的关联和分析,包括数据的连接、聚合、过滤等操作。
通过内容详解,可以更好地理解数据之间的关系,为业务分析和决策提供支持。
oracle数据类型详解---⽇期型(转载)oracle 数据类型详解---⽇期型oracle数据类型看起来⾮常简单,但⽤起来会发现有许多知识点,本⽂是我对ORACLE⽇期数据类型的⼀些整理,都是开发⼊门资料,与⼤家分享:注:由于INTERVAL及TIME ZONE实际⽤得⽐较少,所以本⽂内容未涉及这两个⽅⾯。
1、常⽤⽇期型数据类型1.1、DATE这是ORACLE最常⽤的⽇期类型,它可以保存⽇期和时间,常⽤⽇期处理都可以采⽤这种类型。
DATE表⽰的⽇期范围可以是公元前4712年1⽉1⽇⾄公元9999年12⽉31⽇date类型在数据库中的存储固定为7个字节,格式为:第1字节:世纪+100第2字节:年第3字节:⽉第4字节:天第5字节:⼩时+1第6字节:分+1第7字节:秒+11.2、TIMESTAMP(p)这也是ORACLE常⽤的⽇期类型,它与date的区别是不仅可以保存⽇期和时间,还能保存⼩数秒,⼩数位数可以指定为0-9,默认为6位,所以最⾼精度可以到ns(纳秒),数据库内部⽤7或者11个字节存储,如果精度为0,则⽤7字节存储,与date类型功能相同,如果精度⼤于0则⽤11字节存储。
格式为:第1字节:世纪+100第2字节:年第3字节:⽉第4字节:天第5字节:⼩时+1第6字节:分+1第7字节:秒+1第8-11字节:纳秒,采⽤4个字节存储,内部运算类型为整形注:TIMESTAMP⽇期类型如果与数值进⾏加减运算会⾃动转换为DATE型,也就是说⼩数秒会⾃动去除。
1.3、DATE与TIMESTAMP类型内部存储验证1create table T2 (3 C1 DATE,4 C2 TIMESTAMP(9)5 );67insert into t(c1,c2) values(date'2010-2-12',timestamp'2010-2-12 13:24:52.234123211');8insert into t(c1,c2) values(9 to_date('2010-2-12 10:20:30','YYYY-MM-DD HH24:MI:SS'),10 to_timestamp('2010-2-12 13:24:52.123456','YYYY-MM-DD HH24:MI:SS.FF6')11 );1213 SQL>select c1,dump(c1) c1_d,c2,dump(c2) c2_d from t;C1 C1_D C2 C2_D------------------------ ---------------------------------------- ---------------------------------------- -----------------------------------------------------2010-2-12 Typ=12 Len=7: 120,110,2,12,1,1,1 12-FEB-10 01.24.52.234123211 PM Typ=180 Len=11:120,110,2,12,14,25,53,13,244,111,2032010-2-12 上午 10:20:30 Typ=12 Len=7: 120,110,2,12,11,21,31 12-FEB-10 01.24.52.123456000 PM Typ=180 Len=11:120,110,2,12,14,25,53,7,91,202,0以下是为了测试是为了验证TIMESTAMP的⼩数位存储算法:1 SQL>select c2,dump(c2,16) c2_d16 from t;C2 C2_D16---------------------------------------- --------------------------------------------------------------------------------12-FEB-10 01.24.52.234123211 PM Typ=180 Len=11: 78,6e,2,c,e,19,35,d,f4,6f,cb12-FEB-10 01.24.52.123456000 PM Typ=180 Len=11: 78,6e,2,c,e,19,35,7,5b,ca,0SQL>select to_number('0df46fcb','xxxxxxxx') mydata1,to_number('075bca00','xxxxxxxx') mydata2 from dual;MYDATA1 MYDATA2---------- ----------234123211 1234560002、常见问题2.1、如何取当前时间sysdate--返回当前系统⽇期和时间,精确到秒systimestamp--返回当前系统⽇期和时间,精确到毫秒2.2、如何进⾏⽇期运算⽇期型数据可以与数值加减得到新的⽇期,加减数值单位为天sysdate+1--取明天的当前时间sysdate-1/24--取当前时间的前⼀个⼩时SQL>select sysdate d1,sysdate+1 d2,sysdate-1/24 d3 from dual;D1 D2 D3------------------------ ------------------------ ------------------------2010-5-13 下午 10:55:16 2010-5-14 下午 10:55:16 2010-5-13 下午 09:55:162.3、如何求两个⽇期的间隔时间可以直接把两个⽇期相减,返回的单位为天,⼩时及分秒会换算成⼩数SQL>select date'2012-01-01'-sysdate from dual;DATE'2012-01-01'-SYSDATE------------------------597.0460300925932.4、如何将⽇期转字符to_char(sysdate,'YYYY-MM-DD HH24:MI:SS')2.5、如何将字符转⽇期to_date('2010-02-24 15:01:54','YYYY-MM-DD HH24:MI:SS')to_timestamp('1999-12-01 11:00:00.123456','YYYY-MM-DD HH:MI:SS.FF6')3、常⽤⽇期函数3.1、TO_CHAR(DATE,FORMATSTR)--格式化⽇期成字符SQL>select to_char(sysdate,'YYYY-MM-DD HH24:MI:SS') d1 from dual;D1------------------------2010-05-13 22:56:38TO_CHAR的其它⽤法⽰例1 SQL>SELECT TO_CHAR(date '2010-02-12', 'D') week_dayth,--周第⼏天(1-7),星期天=1,星期⼀=2,星期⼆=3,星期三=4,星期四=5,星期五=6,星期六=72 TO_CHAR(date '2010-02-12', 'DD') month_dayth,--⽉第⼏天3 TO_CHAR(date '2010-02-12', 'DDD') year_dayth,--年第⼏天4 TO_CHAR(date '2010-02-12', 'DAY') weekdayname,--英⽂星期名5 _CHAR(date '2010-02-12', 'w') month_weekth,--⽉第⼏周(0-4)6 TO_CHAR(date '2010-02-12', 'ww') year_weekth--年第⼏周(0-53)7FROM DUAL;WEEK_DAYTH MONTH_DAYTH YEAR_DAYTH WEEKDAYNAME MONTH_WEEKTH YEAR_WEEKTH---------- ----------- ---------- ----------- ------------ -----------6 12 043 FRIDAY 2 073.2、TO_DATE(CHAR,FORMATSTR) --将字符转换成⽇期to_date('2010-02-24 15:01:54','YYYY-MM-DD HH24:MI:SS')格式备注:HH表⽰12⼩时进制,HH24表⽰采⽤24⼩时进制,MM表⽰⽉份,MI表⽰分钟。
ORACLE数据库字段类型说明类型含义存储描述备注CHAR固定长度字符串最⼤长度2000bytesVARCHAR2可变长度的字符串,最⼤长度4000bytes可做索引的最⼤长度749 NCHAR根据字符集⽽定的固定长度字符串最⼤长度2000bytesNVARCHAR2根据字符集⽽定的可变长度字符串最⼤长度4000bytesDATE⽇期(⽇-⽉-年)DD-MM-YY(HH-MI-SS),经过严格测试,⽆千⾍问题TIMESTAMP⽇期(⽇-⽉-年)DD-MM-YY(HH-MI-SS:FF3),经过严格测试,⽆千⾍问题与DATE相⽐较,TIMESTAMP有⼩数位秒信息LONG超长字符串最⼤长度2G,⾜够存储⼤部头著作RAW固定长度的⼆进制数据最⼤长度2000bytes可存放多媒体图象声⾳等LONG RAW可变长度的⼆进制数据最⼤长度2G可存放多媒体图象声⾳等BLOB⼆进制数据最⼤长度4GCLOB字符数据最⼤长度4GNCLOB根据字符集⽽定的字符数据最⼤长度4GBFILE存放在数据库外的⼆进制数据最⼤长度4GROWID数据表中记录的唯⼀⾏号10bytes**.*.*格式,*为0或1NROWID⼆进制数据表中记录的唯⼀⾏号最⼤长度4000bytesNUMBER(P,S)数字类型P为整数位,S为⼩数位DECIMAL(P,S)数字类型P为整数位,S为⼩数位INTEGER整数类型⼩的整数FLOAT浮点数类型NUMBER(38),双精度REAL实数类型NUMBER(63),精度更⾼**⽬前Oracle数据库⼤概有26个字段类型,⼤体分为六类,分别是字符串类型、数字数据类型、⽇期时间数据类型、=⼤型对象(LOB)数据类型、RAW和LONG RAW数据类型、ROWID和UROWID数据类型。
**当然Oracle还提供⽤户⾃定义的数据类型,但在我这篇不做讨论。
字符串类型Charchar数据类型存储固定长度的字符值。
⼀个CHAR数据类型可以包括1到2000个字符。
1.Oracle字符串操作1.1 字符串类型1.1.1 char和varch2类型char和varchar2类型都是用来表示字符串数据类型,用来在表示存放字符串信息,例如姓名、职业、地址等。
char存放定长字符串,如果数据村不满定长长度,则补齐空格;varchar2存放变长字符,实际数据有多少长度则占用多少。
· char(100):10个字母,补齐90个空格,实际占用100个字节。
· varchar2(100):10个字母,实际占用10个字节。
char类型浪费空间换取查询时间的缩短,varchar2节省空间查询时间较char 类型要长。
字符串按照自然顺序排序。
1.1.2 char和varchar2的存储编码字符串在数据库中存储的默认单位是字节,也可显式定为字符。
例:1)char(10),等价于char(10 byte);2)如果指定单位为字符:char(10 char),20个字节;3)varchar2(10),等价于varchar2(10 byte)4)指定单位为字符:varchar2(10 char),20个字节每一个英文字符占用一个字节,每个中文字符按编码不同,占用2~4个字节: 1)ZHS16GBK:2个字节2)UTF-8:2~4个字节1.1.3 char和varchar2的最大长度char类型的最大取值为2000字节。
例:char(2000):采用ZHS16GBK编码,最多保存2000个英文字符,1000个汉字。
varchar2最大取值为4000字节。
例:varchar2(2000):采用ZHS16GBK编码,最多保存4000个英文字符,2000个汉字。
char如果不指定长度,默认1个字节,varchar2必须指定长度。
1.1.4 long和clob类型long类型可以认为是varchar2的加长版,用来存储长字符串,最多达2GB的字符串数据,但是long类型有诸多限制,不建议使用:1)每个表只能有一个long类型列;2)不能作为主键;3)不能建立索引;4)不能出现在查询条件中等等clob用来存储定长或变长字符串,最多达4GB的字符串数据,Oracle建议开发中用clob替代long类型。
oracle和mysql的数据类型Oracle和MySQL是两种常用的关系型数据库管理系统。
虽然它们具有相似的功能和用途,但在数据类型方面存在一些差异。
本文将深入探讨Oracle和MySQL的数据类型,并逐步回答有关这两个数据库的常见问题。
第一部分:Oracle数据类型Oracle提供了广泛的数据类型,用于存储不同类型的数据。
以下是一些常见的Oracle数据类型:1. 字符串类型:- CHAR(n):固定长度的字符串,n表示最大长度。
- VARCHAR2(n):可变长度的字符串,n表示最大长度。
- CLOB:用于存储大量文本数据。
2. 数值类型:- NUMBER(p, s):表示固定精度和范围的数值,p表示总位数,s表示小数位数。
- INTEGER:整数类型。
- FLOAT(p):浮点数类型,p表示精度。
3. 日期和时间类型:- DATE:存储日期和时间。
- TIMESTAMP:带有时区的日期和时间。
4. 二进制类型:- BLOB:用于存储大量二进制数据。
- RAW(n):存储固定长度的原始二进制数据,n表示字节数。
第二部分:MySQL数据类型MySQL也提供了各种数据类型,用于存储不同类型的数据。
以下是一些常见的MySQL数据类型:1. 字符串类型:- CHAR(n):固定长度的字符串,n表示最大长度。
- VARCHAR(n):可变长度的字符串,n表示最大长度。
- TEXT:用于存储大量文本数据。
2. 数值类型:- INT(m):整数类型,m表示显示宽度。
- FLOAT(p, s):浮点数类型,p表示总位数,s表示小数位数。
- DECIMAL(p, s):高精度数值类型,p表示总位数,s表示小数位数。
3. 日期和时间类型:- DATE:存储日期。
- DATETIME:存储日期和时间。
4. 二进制类型:- BLOB:用于存储大量二进制数据。
- VARBINARY(n):可变长度的二进制数据,n表示最大长度。
oracle字段类型查询语句Oracle是一种关系型数据库管理系统,它提供了多种字段类型来存储和处理不同类型的数据。
根据数据的特点和应用需求,我们可以选择合适的字段类型来创建数据库表。
在Oracle中,常见的字段类型包括数值型、字符型、日期型、大对象型和布尔型等。
下面将分别介绍这些字段类型的特点和查询语句。
1. 数值型字段类型Oracle提供了多种数值型字段类型,如整数型、浮点型、小数型等。
常用的数值型字段类型有NUMBER、INTEGER、FLOAT和DECIMAL等。
查询语句示例:创建一个存储整数的字段CREATE TABLE demo (id NUMBER(10));创建一个存储带小数的字段CREATE TABLE demo (price DECIMAL(10, 2));2. 字符型字段类型字符型字段类型用于存储文本数据,如姓名、地址等。
Oracle提供了多种字符型字段类型,如CHAR、VARCHAR2、CLOB等。
查询语句示例:创建一个存储固定长度字符串的字段CREATE TABLE demo (name CHAR(20));创建一个存储可变长度字符串的字段CREATE TABLE demo (comment VARCHAR2(200));3. 日期型字段类型日期型字段类型用于存储日期和时间数据。
Oracle提供了DATE和TIMESTAMP等日期型字段类型。
查询语句示例:创建一个存储日期的字段CREATE TABLE demo (birth_date DATE);创建一个存储日期和时间的字段CREATE TABLE demo (creation_time TIMESTAMP);4. 大对象型字段类型大对象型字段类型用于存储大量的文本数据或二进制数据。
Oracle提供了CLOB和BLOB等大对象型字段类型。
查询语句示例:创建一个存储大文本数据的字段CREATE TABLE demo (description CLOB);创建一个存储大二进制数据的字段CREATE TABLE demo (image BLOB);5. 布尔型字段类型布尔型字段类型用于存储真/假或开/关等逻辑值。
oracle 函数的用法Oracle 是一个非常强大的数据库管理系统,它提供了丰富的函数库,可以让我们在SQL 语句中使用各种函数来实现数据处理、计算和查询。
本文将给大家介绍一些常用的Oracle 函数及其用法。
一、字符串函数1. UPPER 函数:将字符串转换为大写字母。
SELECT UPPER('hello world!') FROM DUAL;结果为:HELLO WORLD!结果为:hello world!3. INSTR 函数:查找子字符串在字符串中第一次出现的位置。
结果为:54. SUBSTR 函数:截取字符串的一部分。
5. REPLACE 函数:将字符串中的某个子串替换为另一个子串。
二、数值函数1. ROUND 函数:将指定的数字四舍五入到指定的小数位数。
3. ABS 函数:计算数字的绝对值。
4. SIGN 函数:返回数字的符号,如果为正数返回 1,为负数返回 -1,为零返回 0。
SELECT SIGN(-10), SIGN(10), SIGN(0) FROM DUAL;结果为:-1 1 05. POWER 函数:计算一个数的指定次幂。
三、日期函数1. SYSDATE 函数:返回当前系统日期和时间。
SELECT SYSDATE FROM DUAL;2. MONTHS_BETWEEN 函数:计算两个日期之间相差的月数。
SELECT MONTHS_BETWEEN('2022-01-01', '2021-01-01') FROM DUAL;3. ADD_MONTHS 函数:对指定日期增加指定的月数。
4. TRUNC 函数:截取日期到指定的精度,例如截取到月份。
5. TO_CHAR 函数:将日期类型转换为字符串类型。
SELECT TO_CHAR(SYSDATE, 'yyyy-mm-dd hh24:mi:ss') FROM DUAL;结果为:2021-08-01 14:00:00四、聚合函数1. COUNT 函数:计算查询结果集中的行数。
oracle函数大全(分析函数,聚合函数,转换函数,日期型函数,字符型函数,数值型函数,其他函数)oracle函数大全 (1)oracle分析函数--SQL*PLUS环境 (1)oracle 10g函数大全--聚合函数 (19)oracle 10g函数大全--转换函数 (23)oracle 10g函数大全--日期型函数 (40)oracle 10g函数大全--字符型函数 (45)oracle 10g函数大全--数值型函数 (55)oracle 10g函数大全--其他函数 (58)oracle分析函数--SQL*PLUS环境一、总体介绍1.1.分析函数如何工作语法 FUNCTION_NAME(<参数>,…) OVER (<PARTITION BY 表达式,…> <ORDER BY 表达式 <ASC DESC> <NULLS FIRST NULLS LAST>> <WINDOWING子句>) PARTITION子句ORDER BY子句 WINDOWING子句缺省时相当于RANGE UNBOUNDED PRECEDING1. 值域窗(RANGE WINDOW)RANGE N PRECEDING 仅对数值或日期类型有效,选定窗为排序后当前行之前,某列(即排序列)值大于/小于(当前行该列值–/+ N)的所有行,因此与ORDER BY子句有关系。
2. 行窗(ROW WINDOW)ROWS N PRECEDING 选定窗为当前行及之前N行。
还可以加上BETWEEN AND 形式,例如RANGE BETWEEN m PRECEDING AND n FOLLOWING 函数 AVG(<distinct all> eXPr)一组或选定窗中表达式的平均值 CORR(expr, expr) 即COVAR_POP(exp1,exp2) / (STDDEV_POP(expr1) * STDDEV_POP(expr2)),两个表达式的互相关,-1(反相关) ~1(正相关),0表示不相关COUNT(<distinct> <*> <expr>) 计数COVAR_POP(expr, expr) 总体协方差COVAR_SAMP(expr, expr) 样本协方差CUME_DIST 累积分布,即行在组中的相对位置,返回0 ~ 1DENSE_RANK 行的相对排序(与ORDER BY搭配),相同的值具有一样的序数(NULL计为相同),并不留空序数FIRST_VALUE 一个组的第一个值LAG(expr, <offset>, <default>) 访问之前的行,OFFSET是缺省为1 的正数,表示相对行数,DEFAULT是当超出选定窗范围时的返回值(如第一行不存在之前行)LAST_VALUE 一个组的最后一个值LEAD(expr, <offset>, <default>) 访问之后的行,OFFSET是缺省为1 的正数,表示相对行数,DEFAULT是当超出选定窗范围时的返回值(如最后行不存在之前行)MAX(expr) 最大值MIN(expr) 最小值NTILE(expr) 按表达式的值和行在组中的位置编号,如表达式为4,则组分4份,分别为1 ~ 4的值,而不能等分则多出的部分在值最小的那组PERCENT_RANK 类似CUME_DIST,1/(行的序数 - 1)RANK 相对序数,答应并列,并空出随后序号RATIO_TO_REPORT(expr) 表达式值 / SUM(表达式值)ROW_NUMBER 排序的组中行的偏移STDDEV(expr) 标准差STDDEV_POP(expr) 总体标准差STDDEV_SAMP(expr) 样本标准差SUM(expr) 合计VAR_POP(expr) 总体方差VAR_SAMP(expr) 样本方差VARIANCE(expr) 方差REGR_ xxxx(expr, expr) 线性回归函数REGR_SLOPE:返回斜率,等于COVAR_POP(expr1, expr2) / VAR_POP(expr2) REGR_INTERCEPT:返回回归线的y截距,等于AVG(expr1) - REGR_SLOPE(expr1, expr2) * AVG(expr2)REGR_COUNT:返回用于填充回归线的非空数字对的数目REGR_R2:返回回归线的决定系数,计算式为:If VAR_POP(expr2) = 0 then return NULLIf VAR_POP(expr1) = 0 and VAR_POP(expr2) != 0 then return 1If VAR_POP(expr1) > 0 and VAR_POP(expr2 != 0 thenreturn POWER(CORR(expr1,expr),2)REGR_AVGX:计算回归线的自变量(expr2)的平均值,去掉了空对(expr1, expr2)后,等于AVG(expr2)REGR_AVGY:计算回归线的应变量(expr1)的平均值,去掉了空对(expr1, expr2)后,等于AVG(expr1)REGR_SXX:返回值等于REGR_COUNT(expr1, expr2) * VAR_POP(expr2)REGR_SYY:返回值等于REGR_COUNT(expr1, expr2) * VAR_POP(expr1)REGR_SXY: 返回值等于REGR_COUNT(expr1, expr2) * COVAR_POP(expr1, expr2) 首先:创建表及接入测试数据。
一、什么是Oracle字符集Oracle字符集是一个字节数据的解释的符号集合,有大小之分,有相互的包容关系。
ORACLE 支持国家语言的体系结构允许你使用本地化语言来存储,处理,检索数据。
它使数据库工具,错误消息,排序次序,日期,时间,货币,数字,和日历自动适应本地化语言和平台。
影响Oracle数据库字符集最重要的参数是NLS_LANG参数。
它的格式如下: NLS_LANG = language_territory.charset它有三个组成部分(语言、地域和字符集),每个成分控制了NLS子集的特性。
其中:Language:指定服务器消息的语言,影响提示信息是中文还是英文Territory:指定服务器的日期和数字格式,Charset:指定字符集。
如:AMERICAN _ AMERICA. ZHS16GBK从NLS_LANG的组成我们可以看出,真正影响数据库字符集的其实是第三部分。
所以两个数据库之间的字符集只要第三部分一样就可以相互导入导出数据,前面影响的只是提示信息是中文还是英文。
二.字符集的相关知识:2.1 字符集实质就是按照一定的字符编码方案,对一组特定的符号,分别赋予不同数值编码的集合。
Oracle数据库最早支持的编码方案是US7ASCII。
Oracle的字符集命名遵循以下命名规则:<Language><bit size><encoding>即: <语言><比特位数><编码>比如: ZHS16GBK表示采用GBK编码格式、16位(两个字节)简体中文字符集2.2 字符编码方案2.2.1 单字节编码(1)单字节7位字符集,可以定义128个字符,最常用的字符集为US7ASCII(2)单字节8位字符集,可以定义256个字符,适合于欧洲大部分国家例如:WE8ISO8859P1(西欧、8位、ISO标准8859P1编码)2.2.2 多字节编码(1)变长多字节编码某些字符用一个字节表示,其它字符用两个或多个字符表示,变长多字节编码常用于对亚洲语言的支持,例如日语、汉语、印地语等例如:AL32UTF8(其中AL代表ALL,指适用于所有语言)、zhs16cgb231280(2)定长多字节编码每一个字符都使用固定长度字节的编码方案,目前oracle唯一支持的定长多字节编码是AF16UTF16,也是仅用于国家字符集2.2.3 unicode编码Unicode是一个涵盖了目前全世界使用的所有已知字符的单一编码方案,也就是说Unicode为每一个字符提供唯一的编码。
Oracle:trunc()函数简介⼀:功能描述 ⽤于截取时间或者数值,返回指定的值。
⼆:语法(1)⽇期处理: TRUNC(date,[fmt]) date 为必要参数,是输⼊的⼀个date⽇期值 fmt 参数可忽略,是⽇期格式,缺省时表⽰指定⽇期的0点。
(2)数值处理: TRUNC(number,[decimals]) number 为必要参数,是输⼊的⼀个number数值 decimals 参数可忽略,是要截取的位数,缺省时表⽰截掉⼩数点后边的值。
三:栗⼦(1)处理⽇期:--sysdate和trunc(sysdate)是不⼀样的 sysdate在当天的零时零分零秒等于trunc(sysdate)select to_char(sysdate, 'yyyy-mm-dd hh24:mi:ss'),to_char(trunc(sysdate), 'yyyy-mm-dd hh24:mi:ss')from dual t;--年select trunc(sysdate, 'yy') "当年第⼀天" from dual;select trunc(sysdate, 'yyyy') "当年第⼀天" from dual;select trunc(sysdate, 'year') "当年第⼀天" from dual;--季度select trunc(sysdate, 'q') "当前季度的第⼀天" from dual;select trunc(add_months(sysdate,3), 'Q') -1/24 "这个季度最后⼀天23点" from dual;--⽉select trunc(sysdate, 'mm') "当⽉第⼀天" from dual;select trunc(sysdate, 'month') "当⽉第⼀天" from dual;select trunc(last_day(sysdate)+1) "下个⽉第⼀天的0点" from dual;--周select trunc(sysdate, 'd') "本周的第⼀天,周⽇起" from dual;select trunc(sysdate,'day') "本周的第⼀天,周⽇起" from dual;select next_day(TRUNC(SYSDATE ), 'TUESDAY' ) +12/24 "下个星期⼆中午12点" from dual;select TRUNC(LEAST(NEXT_DAY(SYSDATE, 'SATURDAY'), NEXT_DAY(SYSDATE, 'SUNDAY'))) +(6*60+10)/(24*60) "下个周六⽇早上6点10分" from dual; --天select trunc(sysdate+1) "今晚12点" from dual;select trunc(sysdate+1) + (8*60+30)/(24*60) "明天早上8点30分" from dual;--时select trunc(sysdate, 'hh')"当前⼩时" from dual;select trunc(sysdate, 'hh24') "当前⼩时" from dual;--分select trunc(sysdate, 'mi') "当前分钟" from dual;select trunc(sysdate,'mi') +10/ (24*60) "10分钟后的时间"from dual;--秒select sysdate +10/(24*60*60) "10秒钟后" from dual;--trunc没有精确到秒的精度(2)处理数值:--123.56,将⼩数点右边指定位数后⾯的截去;select trunc(123.567,2) from dual;--100,第⼆个参数可以为负数,表⽰将⼩数点左边指定位数后⾯的部分截去,即均以0记;select trunc(123.567,-2) from dual;--123,默认截去⼩数点后⾯的部分;select trunc(123.567) from dual;。
Oracle常⽤的数据类型(0) Oracle 数据类型varchar2:可变长字符数据char(size):定长字符数据number(p,s):可变长数值数据date:⽇期型数据long:可变长字符数据,最⼤可达到2Gclob:字符数据,最⼤可达到4GRAW(LONG RAW):原始的⼆进制数据BLOB:⼆进制数据,最⼤可达到4GBFILE:存储外部⽂件的⼆进制数据,最⼤可达到4GROWID:⾏地址(1)字符类型① • CHAR:⼀个定长字符串,当位数不⾜⾃动⽤空格填充来达到其最⼤长度。
如⾮NULL的CHAR(12)总是包含12字节信息。
CHAR字段最多可以存储2,000字节的信息。
② • VARCHAR2:⽬前这也是VARCHAR 的同义词。
这是⼀个变长字符串,与CHAR 类型不同,它不会⽤空格填充⾄最⼤长度。
VARCHAR2(12)可能包含0~12字节的信息。
VARCHAR2最多可以存储4,000 字节的信息。
CHAR和VARCHAR2的⽐较:CHAR(4) “A“ 实际在数据库中存储为"A “,“ABCDE”超长报错VARCHAR2(4) “A” 存储的还是“A”,“ABCDE”超长报错汉字:每个汉字占多少字节,要看具体的编码⽅式,如UTF-8(1-3字节)、GB2312(2字节)、GBK(2字节)、GB18030(1、2、4字节)(2)数字类型①• NUMBER:该数据类型能存储精度最多达38位的数字。
每个数存储在⼀个变长字段中,其长度在0~22字节之间。
的NUMBER类型精度很⾼,远远⾼于许多编程语⾔中常规的FLOAT和DOUBLE类型。
NUMBER( p,s ) p表⽰精度(总长度) s表⽰⼩数位置且四舍五⼊NUMBER(10,3) 10是总长度,3是⼩数位数的长度123.456123.4567 :将存储为123.45712345679.899 :精度超长了,10是总长度,3是⼩数位,整数位为10-3=7位NUMBER(10)==NUMBER(10,0) ng.IntegerNUMBER(19)==NUMBER(19,0) ng.Long(3)⽇期类型①• DATE:⼀个7字节的定宽⽇期/时间数据类型。
字符及处理方法1.固定长度字符串:char(n) 空格补足,效率高,最大2000.2.变长:varchar(n) 最大4000varchar2(n) 最大4000 向下兼容3.在变量声明中的字符类型:char(n) 大小:32767varchar(n),varchar2(n) 为:327674.字符型处理:4.1 向左补全字符串lpad(string,padded_length,[pad_string]) 函数4.2 向右补全字符串rpad(string,padded_length,[pad_string]) 函数4.3 小写返回lower()4.4 大写返回upper()4.5 单词首字符大写initcap()4.6 返回字符长度length()4.7 截取字符串substr(string,start_index,length) 第一个字符位置为14.8 获得字符串出现的位置instr(string ,sub_string, [,start_index] [,times])4.9 删除字符串左侧空格ltrim()4.10 删除字符串右侧空格rtrim()4.11 删除字符串两侧空格trim()4.12 串联字符串concat()select concat(ename,'_emp') from emp;串联方法2:select ename||'_emp'||deptno from emp;-----------||字符串连接符4.13 反转字符串reverse()数值及处理方法一、数值:number [(precision [,scale]]注:precision 为精度,scale 为指定小数后的位数。
根据四舍五入取精度。
对12345.977 精度为8,当精确到小数点后2位为12345.98 精度为7;而精确到小数点前2位的话为12300,精度为3。
对于0.000995 精度为3,精确到小数点后5位为0.00100,此时精度为3。
二、数值处理:2.1 返回数值的绝对值abs()2.2 返回数字的“四舍五入”round()2.3 向上取整ceil()2.4 向下取整floor()2.5 取模mod(被除数,除数)2.6 返回数字的正负性sign()注:小于0时返回-1,大于0时返回1,等于0时返回0.2.7 返回数字的平方根sqrt()2.8 乘方power(底数,指数)2.9 截取数字trunc(原数值[,小数位数])2.10 将ASCII 码转换为字符chr()如:select chr(65) character from dual;CHARACTER---------A2.11 格式化数值to_char(原数值,格式)格式可以为:0、9、,、FM、$、L、C。
(1)“0”select to_char(12.78,'000.000') result from dual;RESULT--------012.780(2)“9”* select to_char(12.78,'999.999') result from dual;RESULT--------12.780* select to_char(0.78,'999.999') result from dual;RESULT--------.780* select to_char(0.78,'990.999') result from dual;RESULT--------0.780(3)“,”select to_char(4560000,'99,999,990.00') result from dual;RESULT--------------4,560,000.00(4)“FM”——Format Maskselect to_char(12.78,'999.999') result ,to_char(12.78,'FM999.999') fm_result from dual;RESULT FM_RESULT-------- ---------12.780 12.78(5)“$”* select to_char(12.78,'$999.999') result from dual;RESULT---------$12.780* select to_char(12.78,'999.9$99') result from dual;RESULT---------$12.780但与FM一起时必须FM在$的开头:* select to_char(12.78,'FM$999.999') result from dual;RESULT---------$12.78(6)“L”select to_char(12.78,'FML999.999') result from dual;RESULT------------------¥12.78(7)“C”select to_char(12.78,'FM999.999C') result from dual;RESULT---------------12.78CNY(8)十进制转换为十六进制x :select to_char(255,'xxx') from dual;TO_CHAR(255,'XXX')------------------ff注:"xxx" 中的x位不能小于实际的十六进制数的位数如:select to_char(255,'x') from dual;TO_CHAR(255,'X')----------------日期及处理方法1.获取当前日期sysdate()SQL> select sysdate from dual;SYSDATE-----------2016-07-312.为日期加上特定月份add_months()注:如果超过日期返回最后一天。
SQL> select add_months(sysdate,1) from dual;ADD_MONTHS(SYSDATE,1)---------------------2016-07-31 PM 01:04:33.返回特定日期的最后一天last_day()SQL> select last_day(to_date('2016-06-28','YYYY-MM-DD')) new_date from dual;NEW_DATE-----------2016-06-294.返回两个日期所差的月数months_between()SQL>selectmonths_between(to_date('1988-7-4','YYYY-MM-DD'),to_date('2012-1-1','YYYY-MM-DD')) new_date from dual;NEW_DATE-----------281.903225.返回当前会话时区的当前日期current_date()SQL>select sessiontimezone,to_char(current_date,'yyyy-mm-dd hh:mi:ss') result from dual;SESSIONTIMEZONERESULT--------------------------------------------------------------------------- -------------------+08:00201-07-31 01:19:49注:+08:00 表明当前时区为东八区。
6.返回当前会话时区的时间戳current_timestamp()SQL> select sessiontimezone,current_timestamp from dual;SESSIONTIMEZONECURRENT_TIMESTAMP-----------------------------------------------------------------------------------------------------------------------------------------------------------+08:0001-1月-12 01.20.45.234000 下午+08:007.将日期转换为字符串to_char()SQL> select to_char(sysdate,'YYYY-MM-DD') new_date from dual;NEW_DATE----------2016-07-318.截取日期trunc(日期,截取格式)(1)将日期截到天:SQL> select trunc(to_date('2010-4-5','YYYY-MM-DD'),'DD') new_date from dual;NEW_DATE-----------2010-04-05(2)将日期截到月:SQL> select trunc(to_date('2010-4-5','YYYY-MM-DD'),'MM') new_date from dual;NEW_DATE-----------2010-04-01(3)将日期截到分钟:SQL> select trunc(sysdate,'MI') from dual;TRUNC(SYSDATE,'MI')-------------------2016-07-31 PM 01:40(4)trunc()函数只截到需要的部分,其它的全为开始值。
如:SQL> select to_char(trunc(sysdate,'DD'),'YYYY-MM-DD HH:MI:SS AM') new_date from dual;NEW_DATE------------------------2016-07-31 12:00:00 上午9.返回日期的某个域extract(域名from 日期)9.1 分离出月份SQL> select extract(month from sysdate) new_month from dual;NEW_MONTH----------79.2 分离出小时SQL> select extract(hour from systimestamp) new_hour from dual;NEW_HOUR----------5注:小时不能用sysdate ,而且用systimestamp 获取的并不是当前时区的时间,而是为零时区的标准时间。