oracle数据类型及其隐式转换

合集下载

oracle函数

oracle函数
Ø显示Blake的雇员编号、姓名和部门编号。
SQL> SELECT empno, ename, deptno
2 FROM
emp
3 WHERE ename = 'blake';
no rows selected
SQL> SELECT 2 FROM 3 WHERE
empno, ename, deptno emp ename = UPPER('blake');
学习改变命运,知 识创造未来
oracle函数
数值型函数
使用ceil函数: SELECT ceil(2.35) FROM dual; 执行结果: CEIL(2.35) ------------3 说明:该函数求得大于等于2.35的最小整数,结果
为3。
学习改变命运,知 识创造未来
oracle函数
数值型函数
--------------- -------------- -----------------
45.92
46
50
学习改变命运,知 识创造未来
oracle函数
使用 TRUNC函数
SQL> SELECT TRUNC(45.923,2), TRUNC(45.923),
2
TRUNC(45.923,-1)
45.92
ØMOD: 取余数 MOD(1600, 300) 100
学习改变命运,知 识创造未来
oracle函数
使用 ROUND 函数
SQL> SELECT ROUND(45.923,2), ROUND(45.923,0),
2
ROUND(45.923,-1)
3 FROM DUAL;

Oracle数据类型

Oracle数据类型

oracle数据类型以下的大多数类型的描述都经本人验证,但不免有错误,请不吝赐教(oracle: 10.2.0.3.0 ,plsql: 7.1.5.1398 )注:以下两个函数有助于理解数据类型length() 当前列存储值的字符长度;vsize() 当前列存储值所占用字节数。

1.CHAR固定长度字符域, 最大长度可达2000 个字符或者字节。

默认指定为以字符形式进行存储,并且当位数不够时oracle 在其右边添加空格来补满。

例如:2.VARCHAR2可变长度字符域,最大长度可达4000 个字符。

例如:CREATE TABLE test(name varchar2(20))2.1.CHAR和VARCHAR2区别1.CHAR 的长度是固定的,而VARCHAR2 的长度是可以变化的,比如,存储字符串,对于CHAR (20),表示你存储的字符将占20 个字节(包括17 个空字符),而同样的VARCHAR2 (20)则只占用3 个字节的长度,20 只是最大值,当你存储的字符小于20 时,按实际长度存储。

2 .CHAR 的效率比VARCHAR2 的效率稍高。

3.目前VARCHAR 是VARCHAR2 的同义词。

工业标准的VARCHAR 类型可以存储空字符串,但是Oracle 不这样做,尽管它保留以后这样做的权利。

Oracle 自己开辟了一个数据类型VARCHAR2,这个类型不是一个标准的VARCHAR,它将在数据库中varchar 列可以存储空字符串的特性改为存储NULL 值。

假如你想有向后兼容的能力,Oracle 建议使用VARCHAR2 而不是VARCHAR。

何时该用CHAR,何时该用varchar2?CHAR 与VARCHAR2 是一对矛盾的统一体,两者是互补的关系. VARCHAR2 比CHAR 节省空间,在效率上比CHAR 会稍微差一些,即要想获得效率,就必须牺牲一定的空间,这也就是我们在数据库设计上常说的‘以空间换效率’ 。

oracle 类型转换函数

oracle 类型转换函数
To_date:转换成日期类型,如:To_date('1980-01-01', 'yyyy-mm-dd'),结果:01-1月-80
To_number:转换成数值类型,如:To_number('1234.5'),结果:1234.5
自动类型转换
Oracle可以自动根据具体情况进行如下的转换:
ceil:求大于等于某数的最小整数,如:ceil(2.35) 3
floor:求小于等于某数的最大整数,如:floor(2.35) 2
round:按指定精度对十进制数四舍五入,如:round(45.923, 1),结果,45.9
round(45.923, 0),结果,46
round(45.923, −1),结果,50
输入并执行查询:
Sql代码
SELECT ename, round(sysdate-hiredate) DAYS
FROM emp
WHERE deptno = 10;
SELECT ename, round(sysdate-hiredate) DAYS
自动转换数值型数据到字符型。
执行以下查询:
Sql代码
SELECT '12.5'||11 FROM dual;
SELECT '12.5'||11 FROM dual;
结果为:
Sql代码
'12.5'
------
12.511
concat:连接两个字符串 concat('SQL', ' Course') SQL Course
substr:给出起始位置和长度,返回子字符串,如:substr('String',1,3) Str

db2与oracle差别

db2与oracle差别

db2与oracle差别1:并发机制Oracle的默认隔离级是快照(Snapshot),写入事务可不能堵塞读取事务,读取事务能够猎取当前已提交值。

DB2默认是游标稳固性(Cursor Stability),写入事务会堵塞读取事务。

2: 数据类型数据库的核心是数据,类型不匹配或者语义的不同都会阻碍应用是否能够同时在两种数据库中运行。

Oracle支持一些非SQL标准的数据类型,例如VARCHAR2,这些是不被D B2支持的;另外,Oracle中的日期、时刻格式和DB2中相应类型在语义上不完全一致;最后Oracle的PL/SQL储备过程所支持的一些标量数据类型在DB2中需要被映射才能被识别。

如右:3: 隐式类型转换Oracle使用弱类型转换,而DB2使用强类型转换。

隐式类型转换能完成一种类型向另外一种类型的自动转换,关于不匹配的类型,假如数据类型能被合明白得释,比较或者赋值时能够执行隐式类型转换;强类型转换规则,意味着字符串和数字类型之间不能直截了当进行比较,除非显式转换。

4:SQL方言DB2传统上坚持对SQL标准的支持,但Oracle实现了专门多方言。

例如:CONNEC T BY 递归语句、(+)连接操作符、DUAL表、ROWNUM伪列、ROWID伪列、MINUS 操作符、SELECT INTO FOR UPDATE语句、TRUNCATE TABLE等。

假如要在DB2数据库上运行使用了上述方言的应用,就需要进行代码级别的翻译,工作量较大。

5:PL/SQL语言就储备过程和函数开发而言,DB2使用SQL PL语言来开发,Oracle使用PL/SQL 语言来开发。

SQL PL和PL/SQL差异庞大,这也是从Oracle到DB2转型最大的工作量所在。

6:内置包为了方便应用程序开发的需要,Oracle数据库提供了专门多内置包:DBMS_OUTPUT、DBMS_SQL、DBMS_ALERT、DBMS_PIPE、DBMS_JOB、DBMS_LOB、DBMS_UTI LITY、UTL_FILE、UTL_MAIL和UTL_SMTP等。

必须重视的Oracle自动类型转换

必须重视的Oracle自动类型转换

29.必须重视的Oracle自动类型转换显示类型转换以date类型为例子。

Oracle中对不同类型的处理具有显式类型转换(Explicit)和自动类型转换(隐式类型转换Implicit)两种方式,对于显式类型转换,我们是可控的,但是对于自动类型转换,当然不建议使用,因为很难控制,有不少缺点,但是我们很难避免碰到自动类型转换,如果不了解自动类型转换的规则,那么往往会改变我们SQL的执行计划,从而可能导致效率降低或其它问题,所以,Oracle开发人员很有必要了解Oracle自动类型转换的相关规则,从而避免自动类型转换导致相关问题的产生。

本章首先会对Oracle自动类型转换的规则做阐述,然后结合相关实例分析自动类型转换可能造成的问题。

29.1 数据类型优先级Oracle使用数据类型的优先级来决定自动类型转换,Oracle类型如下优先:■ Datetime and interval 类型■ BINARY_DOUBLE■ BINARY_FLOAT■ NUMBER■字符类型■所有其它内置类型上面说的不够具体,我们看第二节具体的类型转换规则。

29.2 自动类型转换规则一般一个表达式不能包含多种数据类型,比如一个表达式5*10然后加上'james',但是Oracle会有自动类型转换和显式类型转换两种规则,我们看如下例子:DINGJUN123>select 5*10+'james' from dual;select 5*10+'james' from dual*第1 行出现错误:ORA-01722: 无效数字我们看到,报无效数字错误。

当然,这里Oracle使用了自动类型转换将'james'转为数字类型,但是这个转换是失败的,所以报错,所以自动类型转换的第1个规则就是必须自动类型转换能够成功,否则报错。

我们看下面的就转换成功了:DINGJUN123>select 5*10+'2' from dual;5*10+'2'----------52OK,看到了结果正确,这里的字符串'2'被自动转为数值类型的2(不明白为什么会这样转换,请往下看),所以结果为52.。

oracle的显式和隐式的转换函数

oracle的显式和隐式的转换函数

Oracle的转换函数类型分为①隐形②显性隐式转换(有缺陷如下例子)例子'22.2'+10------------------------------------------这里的字符是有限定的必须是连续的数字((可以是小数)。

(注意:不能出现¥$ 与千分符,)----------32.2显示转化(重点)Tochar()将时间或日期转化成为字符to_char函数对日期转化格式:TO_CHAR(sysdate,‘yyyy-mm-dd hh:mi:ss’)要求:①必须包含在单引号中而且大小写敏感。

②可以包含任意的有效的日期格式。

③参数之间用逗号隔开。

详细见日期与字符串重要的例子:select to_char(sysdate,'yyyy"年"mm"月"dd')--------------------------如果想在年月日中使用(非:空格- /)字符串做为分割要使用“间隔内容”双引号from dualto_char对数字的转化9 数0 零$ 美元符L 本地货币符.-----点小数点,---逗号千位符格式示例:TO_CHAR(salary, '$99,999.00')例子:①select employee_id,to_char(salary,'99,999.00$')from employees结果等同于select employee_id,to_char(salary,'$99,999.00')from employees②select employee_id,to_char(salary,'$ 99,999.00')------------美元符号后面加了空格错误了(因为数字模型没有空格)from employeesto_number()将字符转化成为numberselect to_number('$99.123','$999.000')----------------------------(注意前面是3为小数。

oracle中convert函数用法

oracle中convert函数用法

oracle中convert函数用法Oracle中的convert函数是用来将一个表达式的数据类型转换为另一个数据类型的函数。

该函数可以将字符类型(如VARCHAR2类型)、日期类型和数字类型转换为其他类型。

convert函数的语法如下:CONVERT(e某pr1, data_type [, format])其中,e某pr1表示要转换的表达式,data_type表示要转换的目标数据类型,format是可选的,表示将数据转换为目标类型的格式。

以下是convert函数的常用数据类型和用法。

1.字符类型VARCHAR2和CLOB是Oracle中常见的字符类型。

在使用convert函数时,可以将它们转换为其他字符类型或数字类型。

例如,将一个字符串变为大写字母:SELECT CONVERT('hello', 'CHAR(5)') AS UpperCase FROM DUAL;结果为:HELLO2.日期类型日期类型在Oracle中有三种:DATE、TIMESTAMP和INTERVAL。

使用convert函数时,可以将它们转换为其他日期类型或字符类型。

例如,将一个日期转换为格式化的字符类型:SELECT CONVERT(TO_DATE('2022-02-22', 'yyyy-mm-dd'),'VARCHAR2(20)', 'dd/mm/yyyy') FROM DUAL;结果为:22/02/20223.数字类型Oracle中的数字类型包括:NUMBER、BINARY_FLOAT和BINARY_DOUBLE。

转换时,可以将它们转换为其他数字类型或字符类型。

例如,将一个整数转换为字符类型:SELECTCONVERT(123,'VARCHAR2(5)')FROMDUAL;结果为:123需要注意的是,convert函数不会隐式转换数据类型,因此需要显式指定目标数据类型和格式。

oracle sql数据类型函数

oracle sql数据类型函数

oracle sql数据类型函数一、Oracle SQL数据类型简介Oracle SQL支持多种数据类型,包括数值类型、字符串类型、日期和时间类型、布尔类型等。

了解这些数据类型有助于更好地利用Oracle SQL进行数据处理。

1.数值类型:包括整数类型(如INTEGER、SMALLINT、TINYINT)、浮点数类型(如FLOAT、DOUBLE PRECISION、NUMERIC)、decimal和char 类型等。

2.字符串类型:包括VARCHAR2、CHAR、NCHAR等。

3.日期和时间类型:包括DATE、TIMESTAMP、TIMESTAMP WITH TIME ZONE、INTERVAL等。

4.布尔类型:BOOLEAN。

二、Oracle SQL常用函数概述Oracle SQL提供了丰富的函数,可以方便地进行数据处理和分析。

以下为一些常用函数类别:1.数据类型转换与处理函数:如CAST、CONVERT、TRUNC等。

2.字符串处理函数:如LENGTH、SUBSTR、INSTR、LIKE等。

3.数学与逻辑运算函数:如SUM、AVG、MIN、MAX、MOD、LOG、POWER等。

4.日期和时间函数:如SYSDATE、TO_DATE、DATE_ADD、DATE_SUB 等。

5.聚合与分组函数:如GROUP BY、HAVING、SELECT DISTINCT等。

三、实战案例与应用以下为一个简单的实战案例,演示如何使用Oracle SQL数据类型和函数进行数据处理:假设我们有一个员工表(EMPLOYEE),包含以下字段:ID(整数类型)、NAME(字符串类型)、AGE(整数类型)、DEPARTMENT(字符串类型)、SALARY(浮点数类型)、HIRE_DATE(日期类型)、LEAVE_DATE(日期类型)。

1.查询所有员工的详细信息:```SELECT * FROM EMPLOYEE;```2.查询年龄大于30岁的员工名单:```SELECT NAME FROM EMPLOYEE WHERE AGE > 30;```3.计算所有员工的薪资总额:```SELECT SUM(SALARY) FROM EMPLOYEE;```4.查询各部门的平均年龄:```SELECT DEPARTMENT, AVG(AGE) FROM EMPLOYEE GROUP BY DEPARTMENT;```5.统计员工离职人数:```SELECT COUNT(*) FROM EMPLOYEE WHERE LEAVE_DATE IS NOT NULL;```通过以上案例,我们可以看到Oracle SQL数据类型和函数在实际应用中的重要作用。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

备注:转换时要根据给定的string设定正确的格式掩码,否则
Ora_01840:input value is not long enough for date format.
Ora_01862:the numeric value does not match the length of the format item.
3) to_number
字符值->数字值
语法:to_number (string,[format mask],[nls_parameters])
参数:string 待转换的字符值
format mask:可选参数
格式掩码同to_char转换为number时相同。

备注:如果使用较短的格式掩码就会返回错误。

例如: to_number(123.56,’999.9’)返回错误。

在oracle中,如果不同的数据类型之间关联,如果不显式转换数据,则它会根据以下规则对数据进行隐式转换
1) 对于INSERT和UPDATE操作,oracle会把插入值或者更新值隐式转换为字段的数据类型。

假如id列的数据类型为number
update t set id='1'; -> 相当于update t set id=to_number('1');
insert into t(id) values('1') -> insert into t values(to_number('1'));
2) 对于SELECT语句,oracle会把字段的数据类型隐式转换为变量的数据类型。

如假设id列的数据类型为varchar2
select * from t where id=1; -> select * from t where to_number(id)=1;
但如果id列的数据类型为number,则
select * from t where id='1'; -> select * from t where id=to_number('1');(参考下文)
3) 当比较一个字符型和数值型的值时,oracle会把字符型的值隐式转换为数值型。

如假设id列的数据类型为number
select * from t where id='1'; -> select * from t where id=to_number('1');
4) 当比较字符型和日期型的数据时,oracle会把字符型转换为日期型。

如假设create_date为字符型,
select * from t where create_date>sysdate; -> select * from t where
to_date(create_date)>sysdate;(注意,此时session的nls_date_format需要与字符串格式相符)假设create_date为date型,
select * from t where create_date>'2006-11-11 11:11:11'; -> select * from t
where create_date>to_date('2006-11-11 11:11:11'); (注意,此时session的nls_date_format 需要与字符串格式相符)
5) 如果调用函数或过程等时,如果输入参数的数据类型与函数或者过程定义的参数数据类型不一直,则oracle会把输入参数的数据类型转换为函数或者过程定义的数据类型。

如假设过程如下定义p(p_1 number)
exec p('1'); -> exec p(to_number('1')); 6)
赋值时,oracle会把等号右边的数据类型转换为左边的数据类型。

如var a number a:='1'; - > a:=to_number('1');
7) 用连接操作符(||)时,oracle会把非字符类型的数据转换为字符类型。

select 1||'2' from dual; -> select to_char(1)||'2' from dual;
8) 如果字符类型的数据和非字符类型的数据(如number、date、rowid等)作算术运算,则oracle 会将字符类型的数据转换为合适的数据类型,这些数据类型可能是number、date、rowid等。

如果CHAR/VARCHAR2 和NCHAR/NVARCHAR2之间作算术运算,
则oracle会将她们都转换为number类型的数据再做比较。

9) 比较CHAR/VARCHAR2 和NCHAR/NVARCHAR2时,如果两者字符集不一样,则默认的转换方式是将数据编码从数据库字符集转换为国家字符集。

简单总结:
比较时,一般是字符型转换为数值型,字符型转换为日期型
算术运算时,一般把字符型转换为数值型,字符型转换为日期型连接时(||),一般是把数值型转换为字符型,日期型转换为字符型赋值、调用函数时,以定义的变量类型为准。

相关文档
最新文档