Oracle数据隐式转换规则

本文详细介绍了Oracle数据库中隐式数据类型转换的规则,包括INSERT、UPDATE操作时的转换,SELECT语句中的转换,不同数据类型间的比较,SQL函数及操作符的参数转换等。

Oracle数据隐式转换规则

 

The following rules govern the direction inwhich Oracle makes implicit data type conversions(在oracle中,如果不同的数据类型之间关联,如果不显式转换数据,则它会根据以下规则对数据进行隐式转换):

1)      During INSERT and UPDATE operations, Oracle converts the value tothe datatype of the affected column

(对于INSERTUPDATE操作,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)      During SELECT FROM operations, Oracle converts the data from thecolumn to the type of the target variable

(对于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)      When comparing a character value with a NUMBER value, Oracleconverts the character data to NUMBER

(当比较一个字符型和数值型的值时,oracle会把字符型的值隐式转换为数值型).
如:
假设id列的数据类型为number
select * from t where id='1'; -> select * from t where id=to_number('1');

4)      When comparing a character value with a DATE value, Oracle convertsthe character data to DATE

(当比较字符型和日期型的数据时,oracle会把字符型转换为日期型).

如:

假设create_date为字符型,

select * fromt where create_date>sysdate; -> select * from t whereto_date(create_date)>sysdate;(注意,此时session的nls_date_format需要与字符串格式相符)

假设create_date为date型

select * fromt where create_date>'2006-11-11 11:11:11'; -> select * from t wherecreate_date>to_date('2006-11-11 11:11:11'); (注意,此时session的nls_date_format需要与字符串格式相符)

 

5)      When you use a SQL function or operator with an argument of adatatype other than the one it accepts, Oracle converts the argument to theaccepted datatype.
(如果调用函数或过程等时,如果输入参数的数据类型与函数或者过程定义的参数数据类型不一直,则oracle会把输入参数的数据类型转换为函数或者过程定义的数据类型)
如:
假设过程如下定义
p(p_1 number)
exec p('1'); -> exec p(to_number('1'));

6)     When making assignments, Oracle converts the value on the right sideof the equal sign (=) to the datatype of the target of the assignment on theleft side

(赋值时,oracle会把等号右边的数据类型转换为左边的数据类型).
如:
var a number
a:='1'; - > a:=to_number('1');

7)      During concatenation operations, Oracle converts from noncharacterdatatypes to CHAR or NCHAR

(用连接操作符(||)时,oracle会把非字符类型的数据转换为字符类型).
如:
select 1||'2' from dual; -> select to_char(1)||'2' from dual;

 

8)      During arithmetic operations on and comparisons between characterand noncharacter datatypes, Oracle converts from any character datatype to anumber, date, or rowid, as appropriate. In arithmetic operations betweenCHAR/VARCHAR2 and NCHAR/NVARCHAR2, Oracle converts to a number.
如果字符类型的数据和非字符类型的数据(numberdaterowid)作算术运算,则oracle会将字符类型的数据转换为合适的数据类型,这些数据类型可能是numberdaterowid等。如果CHAR/VARCHAR2NCHAR/NVARCHAR2之间作算术运算,则oracle会将她们都转换为number类型的数据再做比较。

9)      Comparisons between CHAR/VARCHAR2 and NCHAR/NVARCHAR2 types mayentail different character sets. The default direction of conversion in suchcases is from the database character set to the national character set.

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

 

(1)普通用户端(全平台) 音乐播放核心体验: 个性化首页:基于 “听歌历史 + 收藏偏好” 展示 “推荐歌单(每日 30 首)、新歌速递、相似曲风推荐”,支持按 “场景(通勤 / 学习 / 运动)” 切换推荐维度。 播放页功能:支持 “无损音质切换、倍速播放(0.5x-2.0x)、定时关闭、歌词逐句滚动”,提供 “沉浸全屏模”(藏冗余控件,突出歌词与专辑封面)。 多端同步:自动同步 “播放进度、收藏列表、歌单” 至所有登录设备(如手机暂停后,电脑端打开可继续播放)。 音乐发现与管理: 智能搜索:支持 “歌曲名 / 歌手 / 歌词片段” 搜索,提供 “模糊匹配(如输入‘晴天’联想‘周杰伦 - 晴天’)、热门搜索词推荐”,结果按 “热度 / 匹配度” 排序。 歌单管理:创建 “公开 / 私有 / 加密” 歌单,支持 “批量添加歌曲、拖拽排序、一键分享到社交平台”,系统自动生成 “歌单封面(基于歌曲风格配色)”。 音乐分类浏览:按 “曲风(流行 / 摇滚 / 古典)、语言(国语 / 英语 / 日语)、年代(80 后经典 / 2023 新歌)” 分层浏览,每个分类页展示 “TOP50 榜单”。 社交互动功能: 动态广场:查看 “关注的用户 / 音乐人发布的动态(如‘分享新歌感受’)、好友正在听的歌曲”,支持 “点赞 / 评论 / 转发”,可直接点击动态中的歌曲播放。 听歌排行:个人页展示 “本周听歌 TOP10、累计听歌时长”,平台定期生成 “全球 / 好友榜”(如 “好友中你本周听歌时长排名第 3”)。 音乐圈:加入 “特定曲风圈子(如‘古典音乐爱好者’)”,参与 “话题讨论(如‘你心中最经典的钢琴曲’)、线上歌单共创”。 (2)音乐人端(创作者中心) 作品管理: 音乐上传:支持 “无损音频(FLAC/WAV)+ 歌词文件(LRC)+ 专辑封面” 上传,填写 “歌曲信息
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值