Oracle入门(十四C)之转换函数

一、数据转换类型

为数据库创建表时,SQL 程序员必须定义在表的各个字段中存储何种数据。在 SQL 中,有几种不同的数据类型。这些数据类型用于定义每个列中可以包含的值的范围。

(1)在本文中将使用以下数据类型

VARCHAR2
CHAR
NUMBER

DATE

(2)数据类型
VARCHAR2:用于可变长度的字符数据,包括数字、特殊字符和短划线。
CHAR:用于固定长度的文本和字符数据,包括数字、短划线和特殊字符。
NUMBER:用于存储可变长度的数字数据。不能包含短划线、文本及其它非数字数据。货币存储为 NUMBER 数据类型。
DATE:用于日期和时间值。在内部,Oracle将日期存储为数字,默认情况下,DATE 信息的显示格式为 DD-MON-YY(如 19-JUN-04)。

(3)四种数据类型转换函数

Oracle Server 可以在内部将VARCHAR2 和 CHAR 数据转换为 NUMBER 和 DATE数据类型。它可以将 NUMBER和 DATE 数据转换回CHARACTER 数据类型。虽然这是一种方便的功能,但最好始终显式执行数据类型转换,以确保 SQL 语句可靠。

将学习以下四种数据类型转换函数:

• 将日期数据类型转换为字符数据类型
• 将数字数据类型转换为字符数据类型
• 将字符数据类型转换为数字数据类型
• 将字符数据类型转换为日期数据类型




二、将日期数据转换为字符数据

(1)经常需要将以 DD-MON-YY 默认格式存储在数据库中的日期转换为用户指定的其它格式。

用来完成此任务的函数是:

TO_CHAR (日期列名, '指定的格式样式')
• “格式样式”是区分大小写的,并且必须放在单引号内。
• 需要用逗号将日期值与“格式样式”隔开。
• 可以使用任何有效的日期格式元素。
• 可以使用 fm 元素从输出中删除填充的空格或删除前导零。
• 可以使用 sp 以文本形式显示数字。
• 可以使用 th 将数字显示为序数。(1st、2nd、3rd,依此类推)。
• 可以使用双引号将字符串添加到格式样式中。

(2)这些表显示了可以使用的各种格式样式。请注意,指定时间元素时,还可以设置小时 (HH)、分钟 (MI)、秒 (SS) 和 AM 或 PM 等格式。


(3)例如,以下查询将返回 May 04, 2004。如果某个活动的日期是 04-MAY-04,则使用 fm格式样式时将返回 May 4, 2004,即隐藏前导零。

SELECT TO_CHAR (活动日期, 'fmMonth dd, RRRR')  FROM d_活动;

以下查询的输出结果是什么?
SELECT 标识, TO_CHAR(活动日期, 'MONTH DD, YYYY')  FROM d_活动;


(4)日期和时间格式样式

使用哪些格式样式可将今天的日期分别输出为以下格式?

August 6th, 2007
August 06, 2007
AUG 6, 2007
August 6th, Friday, Two
Thousand Seven


三、将数字数据转换为 VARCHAR2 字符数据

(1)存储在数据库中的数字是不含格式的。

这意味着没有货币符号、逗号千位分隔符和小数,也没有其它格式。要添加格式,您需要先将数字转换为字符格式。在进行字符连接时此转换尤为有用。

用来将数字数据列转换为所需格式的 SQL 函数是:

TO_CHAR(数字,'格式样式')


(2)此表介绍了可在TO_CHAR 函数中使用的几种格式元素。
SELECT TO_CHAR(费用,'$99,999') 费用  FROM d_活动


(3)使用哪些格式样式可以生成如下输出结果?
$3000.00
4,500
9,000.00

0004422


四、将字符数据转换为数字数据
(1)经常需要将字符串转换成数字。用来完成此转换的函数是:
TO_NUMBER(字符串, '格式样式')
此函数将非数字值(如‘450’)转换成数字,不带单引号。
单引号是字符。“450”在数据库中存储为字符数据,以下查询将其转换成数字,以便执行算术运算。无法对字符数据执行计算。
SELECT TO_NUMBER('450') AS "数字转换"  FROM DUAL;

(2)SELECT TO_NUMBER('450', '9999') + 10 AS "数字转换" FROM DUAL;

SQL*Plus 会将超过格式样式指定位数的数字显示为一串井号 (#);还会将数字舍入到格式样式中提供的小数位。

如果格式样式与数据库返回的实际数字不匹配,OracleApplication Express 将返回“Oracle 错误 - 数字无效”。


五、将字符数据转换为日期数据
(1)要将字符串转换成日期格式,请使用以下格式:
TO_DATE('字符串', '格式样式')
此转换接受非日期值字符串(如“November 3, 2001”),并将其转换成日期值。格式样式告诉服务器该字符串“看起
来像”什么:
TO_DATE('November 3, 2001', 'Month dd, RRRR')

将返回 03-NOV-01

(2)在执行字符到日期的转换时,fx(格式完全匹配)限定符指定字符参数必须与日期格式样式完全匹配。
请注意,在下面的示例中,“May10”中的“May”和“10”之间没有空格。只有当 fx 格式样式中的“Mon”和“DD”之间也没有空格时,它才与字符参数相匹配。

SELECT TO_DATE('May10,1989', 'fxMonDD,RRRR') AS "转换"  FROM DUAL;

(3)fx 限定符规则
fx 限定符规则如下:
• 字符参数中的标点和加引号文本必须与格式样式中的对应部分完全匹配(大小写除外)。
• 字符参数不能有额外的空格。不使用fx 时,Oracle Server 会忽略额外的空格。

• 字符参数中的数字数据必须与格式样式中的对应元素具有相同的位数。不使用fx 时,字符参数中的数字可省略前导零。

(4)RR 日期格式和 YY 日期格式
不久前,我们从 20 世纪(1900) 进入了 21 世纪(2000),这一变化带来了相当大的混乱。那就是,如果一个日期写为02-JAN-00,那么应当将其解释为 1900 年 1 月 2 日还是 2000 年 1 月 2 日?

幸运的是,Oracle 采用了适当的方式,可保证这类日期在存储和检索时都具备正确的世纪。



六、几个简单的规则
(1)如果指定日期格式时使用的是 YY 或 YYYY 格式,则返回的值在当前世纪中。所以,如果当前年份是 1995 而您使用的是 YY或 YYYY 格式,则一切正常,日期将在 20 世纪中。但是,如果当前年份是 2004,而您为 1989 之类的日期使用的是 YY 或YYYY格式,则返回的将是 2089!这可能不是您希望得到的结果。


(2)如果指定数据格式时使用的是 RR 或 RRRR 格式,则返回的值有两种可能。
如果当前年份介于 00 到49 之间,那么:
• 对于 0 到 49 之间的日期:日期将在当前世纪中

• 对于 50 到 99 之间的日期:日期将在上一个世纪中

如果当前年份介于 50 到 99 之间,那么:

• 对于 0 到 49 之间的日期:日期将在下一个世纪中
• 对于 50 到 99 之间的日期:日期将在当前世纪中


(3)使用以下语句查询雇员数据库时,它返回了表中的所有行。我知道仅有一部分雇员是在 1990 年之前聘用的。我弄错了吗?

SELECT 姓氏, TO_CHAR(聘用日期,'DD-Mon-YYYY')  

FROM 雇员  

WHERE 聘用日期 <TO_DATE('01-Jan-90','DD-Mon-YY');


七、术语
本课中使用的主要术语包括:
CHAR
DATE
DD 日期格式
转换函数
fm
NUMBER
RR 日期格式
TO_CHAR
TO_DATE 函数
TO_NUMBER
VARCHAR2


八、小结

在本文中,应该已经学会:

• 为显式数据类型转换和隐式数据类型转换各举一个例子
• 从企业角度说明,为什么一种语言有内置数据转换功能很重要
• 构建正确应用 TO_CHAR、TO_NUMBER 和 TO_DATE单行函数生成所需结果的 SQL 查询
• 应用适当的日期和(或)字符格式样式来生成所需的输出
• 解释 YYYY 和 RRRR 的用法,并应用 YYYY 和 RRRR正确返回存储在数据库中的年份

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/329403.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

发布在即!.NET Core 1.0 RC2已准备就绪

先说点废话&#xff0c;从去年夏天就开始关注学习ASP.NET Core&#xff0c;那时候的版本还是beta5&#xff0c;断断续续不停踩坑、一路研究到11月份RC1发布。 在这个乐此不疲的过程里&#xff0c;学习了很多新的东西&#xff0c;对ASP.NET Core也是越来越喜爱。然而到现在&…

1.java IO模型(BIO,NIO,AIO)

【README】 本文介绍了 3种 java io模型&#xff0c;包括 BIO&#xff0c;NIO&#xff0c; AIO&#xff1b; IO模型名称 描述 工作原理 BIO-Blocking IO 同步并阻塞式IO 一个服务器线程处理一个客户端连接 NIO-Non-blocking IO 同步非阻塞式IO 一个服务器线程处理多个…

Oracle入门(十四D)之常规函数

一、NULL处理 &#xff08;1&#xff09;函数的计算过程 到目前为止&#xff0c;您已经学会了在简单语句中应用单行函数。不过&#xff0c;函数可以嵌套任意层。所以&#xff0c;了解嵌套函数的计算过程非常重要。下例就是一个嵌套函数。其计算过程是从最里层开始计算&#xff…

python定义函数prime判断是否是素数_用自定义函数判断素数 用C语言编写自定义函数prime(int x),判断x是否为素数?...

用C语言编写自定义函数prime(int x)&#xff0c;判断x是否为素数&#xff1f;int prime(int x){int i&#xff0c;kk(int)sqrt( (double)x )for(i2i&ltki )if(x%i0)break// 如果完成所有循环&#xff0c;那么x为素数if(i&gtk)retrun 1elsereturn 0}C语言&#xff0c;编…

构建高性能.NET应用之配置高可用IIS服务器-第一篇:IIS必须掌握的知识

正确而合理的配置IIS是构建一个高性能和高可扩展应用的基础。虽然很多的时候采用默认的配置就已经可以处理一般的情况&#xff0c;但是随着站点应用的发展&#xff0c;特别是当访问量稍微大一点的时候&#xff0c;就会暴露出很多我们认为的“奇奇怪怪”的问题。 所以&#xff0…

3.NIO选择器(基于NIO的服务器与客户端通讯)

【README】 本文总结自B站《尚硅谷netty》&#xff0c;很不错&#xff1b; 【1】选择器Selector&#xff08;多路复用器&#xff09; 【1.1】基本介绍 1&#xff09;Java 的 NIO&#xff0c;用非阻塞的 IO 方式。可以用一个线程&#xff0c;处理多个客户端连接&#xff0c;就…

perplexity 衡量指标_求通俗解释NLP里的perplexity是什么?

高赞回答讲得已经非常通俗易懂&#xff0c;不过由于自然语言处理的发展&#xff0c;出现了许多不同类型的模型&#xff0c;对困惑度这个指标的计算方法颇有不同(包括前面的高赞回答也只是展开了一个子集)&#xff0c;常常让人摸不着头脑。所以这个回答旨在尽量全面地梳理不同语…

C#在Linux上的开发指南

本人才疏学浅&#xff0c;在此记录自己用C#在Linux上开发的一点经验&#xff0c;写下这篇指南。&#xff08;给想要在Linux上开发C#程序的朋友提供建议&#xff09; 目前在Linux上跑的网站&#xff1a;http://douxiubar.com | http://douxiubar.com/AdminLogin/Index&#xff0…

Oracle入门(十四E)之条件表达式case和deocde函数

一、表达式&#xff08;1&#xff09;条件表达式 共有两种条件表达式&#xff0c;即 CASE 表达式和DECODE 表达式。就 CASE 比较两个表达式而言&#xff0c;该表达式在逻辑上等效于之前学习的NULLIF 函数。如果两个表达式相等&#xff0c;则返回null&#xff0c;如果不相等&…

4.基于NIO的群聊系统

【README】 1.本文总结自B站《netty-尚硅谷》&#xff0c;很不错&#xff1b; 2.文末有错误及解决方法&#xff1b; 【1】群聊需求 1&#xff09;编写一个 NIO 群聊系统&#xff0c;实现服务器端和客户端之间的数据简单通讯&#xff08;非 阻塞&#xff09; 2&#xff09;实…

构建高性能.NET应用之配置高可用IIS服务器-第二篇 IIS请求处理模型

在IIS 中&#xff0c;Http监听者(http.sys)和请求处理者由两个系统服务在控制着。一个是WWW 服务&#xff0c;另外一个就是Windows Process Activation。 对于WWW服务&#xff0c;它主要是监控IIS的配置文件&#xff0c;将新的配置信息用到HTTP.sys和WAS上。同时它也维持一些性…

Oracle入门(十四F)之PL/SQL定义变量

一、变量介绍 &#xff08;1&#xff09;变量的使用可以使用变量&#xff1a; 临时存储数据存储值的操作可重用性&#xff08;2&#xff09;PL&#xff0f;SQL中的变量处理变量是&#xff1a; 在声明部分中声明和初始化在可执行部分中使用和分配新值变量可以是&#xff1a;作为…

小米手环nfc门卡摸拟成功后不能开门_如何使用小米手环5 NFC版进行门卡模拟(如公司门禁卡、小区门禁卡、学校门禁卡等)?...

由于本人最近购入了小米手环5 NFC版&#xff0c;所以对小米手环模拟门禁卡比较清楚一点。说一下用该手环模拟门禁的方法吧&#xff0c;我本人模拟的是学校公寓的门禁卡&#xff0c;不过学校的门禁卡是加密卡&#xff0c;可能操作起来稍微比不加密的门禁卡麻烦一点&#xff0c;因…

5.NIO零拷贝与传统IO的文件传输性能比较

【README】 1.本文总结自B站《netty-尚硅谷》&#xff0c;很不错&#xff1b; 2.本文部分内容参考自 NIO效率高的原理之零拷贝与直接内存映射 - 腾讯云开发者社区-腾讯云 【1】零拷贝原理 【1.1】传统IO的文件拷贝 【图解】 step1&#xff09;调用 sys_read系统调用&#…

二进制漏洞利用与挖掘_二进制各种漏洞原理实战分析总结

本部分将对常见的二进制漏洞做系统分析&#xff0c;方便在漏洞挖掘过程中定位识别是什么类型漏洞&#xff0c;工欲善其事&#xff0c;必先利其器。0x01栈溢出漏洞原理栈溢出漏洞属于缓冲区漏洞的一种&#xff0c;实例如下&#xff1a;编译后使用windbg运行直接运行到了地址0x41…

Oracle入门(十四H)之良好的编程实践

一、为什么要学习它 好的编程实践是技巧&#xff0c;可以按照创建最好的代码可能。 编程实践涵盖了一切从代码更多可以用更快的速度创建代码性能。 软件工程团队通常会遵循风格指导让团队中的每个人使用相同的技术。 这使它更容易阅读和修改编写的代码其他。二、编程实践已经学…

微软.NET 正式劈腿成功,横跨所有平台

.NET官方博客宣布了《Announcing .NET Core RC2 and .NET Core SDK Preview 1》&#xff0c;正式如期发布了.NET Core RC2, 现在可以放心的基于.NET Core 构建 ASP.NET Core, console apps 和 class libraries for Windows, OS X and Linux。这里贴张图表达下他们之间的关系: …

2.BIO与NIO区别

【README】 1.本文总结自B站《netty-尚硅谷》&#xff0c;很不错&#xff1b;2.本文介绍 BIO&#xff0c; NIO的知识&#xff1b;【1】BIO&#xff08;传统java IO模型&#xff09; 1&#xff09;BIO-Blocking IO&#xff1a;同步阻塞&#xff0c;服务器实现模式为一个连接一…

k8s往secret里导入证书_K8S之Secret

简介secret顾名思义&#xff0c;用于存储一些敏感的需要加密的数据。这些数据可能是要保存在pod的定义文件或者docker的镜像中。把这些数据通过加密的方式存放到secrets对象中&#xff0c;可以降低信息泄露的风险。在secret中存储的数据都需要通过base64进行转换加密后存放。创…

Oracle入门(十四G)之PL / SQL中检索数据

一、PL / SQL中检索数据 &#xff08;1&#xff09;PL / SQL中的SQL语句可以在PL / SQL中使用以下几种SQL语句&#xff1a;•SELECT从数据库检索数据。•DML语句&#xff0c;例如INSERT&#xff0c;UPDATE和DELETE&#xff0c;以更改数据库中的行。•事务控制语句&#xff0c;例…