Oracle中字符串、数值操作

本文详细介绍Oracle数据库中字符串和数值的操作方法,包括SELECT语句的使用,字符串函数如CONCAT、LENGTH、UPPER等,以及数值函数如ROUND、TRUNC、MOD等。通过实例演示如何进行数据拼接、截取、格式化及数学运算。

前言

这一篇主要介绍的是Oracle中字符串、数值的相关操作,会涉及到函数,因为函数不能单独存在,因此会先简单说一下SELECT语句。

SELECT语句

SELECT * FROM A WHERE id=1

这是一条查询语句,

  • 表示查询出表中所有字段,也可以选择写出具体的字段名
    FROM 后面跟查询的表
    WHERE 后面跟查询的过滤条件,可以跟一个或多个,也可以不跟条件。

SELECT 子句中可以跟表达式也可以跟函数。
例如:SELECT name,salary*12 FROM A 表示查询A表中各信息的名称和十二个月的工资
函数的示例在下面展示。

字符串函数

CONCAT()

拼接字符串

SELECT ename,sal FROM A                 

结果:
在这里插入图片描述

SELECT CONCAT(ename,sal) FROM A   

结果:
在这里插入图片描述

CONCAT函数可以包含CONCAT函数,从而实现多个字符串的拼接
除了CONCAT函数,还有一种拼接方式就是||的方式,
例如:SELECT ename || sal FROM A
也可以实现CONCAT 的结果,而且更加的简单一些。

LENGTH()

LENGTH©
如果c是varchar,返回字符串实际的长度,如果是char返回char的固定长度,包括空格。

SELECT ename,LENGTH(ename) FROM A

UPPER/LOWER/INITCAP

将字符串转为全大写/全小写/首字母大写
对于INITCAP可以用空格隔开多个单词,那么每个单词的首字母都会大写

dual

Oracle中的伪表
当查询的内容与任何一张表都没有关系时,可以使用伪表,伪表只会查询出一条数据。

TIRM/LTRIM/RTRIM

TRIM(a from b)去除当前字符串中两边的指定重复字符,指定字符只能是单一的字符不能有多个,比如a可以是’m’但不能为’mn’
LTRIM(b,a)只去除左边,去除b中左边的a,这里的a可以是多个字符,比如LTRIM(’errewyyyee‘,’erw‘),得到的结果是yyyee,会将左边的errew都去掉,也就是说会将b中左边包含a中各字符的都去掉,知道没有包含字符结束。
RTRIM(b,a)只去除右边,同LTRIM

SELECT TRIM('e' FROM 'eeessseee') FROM dual
SELECT LTRIM('eeessseee','e') FROM dual
SELECT RTRIM('eeessseee','e') FROM dual

LPAD/RPAD

补位函数,将不足的位数补出
LPAD(sal,6,’@’) 表示将sal补充到6位,不足的用@在左侧补齐

可以通过补充空格实现左对齐和右对齐效果

SUBSTR

截取字符串
SUBSTR(‘hello world’,7,2)
从下标七开始截取两位
结果为wo

如果第三个参数没有或者长度超出的字符串的长度,都是表示截取到末尾
截取的位置可以是负数,表示从倒数的第几个字符开始截取

在数据库中下标是从1开始的

INSTR

INSTR(c1,c2,[,n[,m]])
返回字符串c2在字符串c1中的位置
从n开始搜索,没有从1开始
m表示c2的第几次出现,没有就是第一次
如果c1中没有c2则返回0

ROUND

ROUND(m,n) 四舍五入
m表示需要计算的数,
n必须是整数
n为正整数,表示四舍五入到小数点后的第n位
n为0表示四舍五入到整数位
n为负整数,表示四舍五入到小数点前的第n位

TRUNC

TRUNC(m,n)截取数字
截取的位数后面的值不重要,值截取对应的位的值
比如

SELECT TRUNC(345.678,2) FROM dual

结果为 345.67

MOD

MOD(m,n)求余数

如果除数n为0返回m

CEIL/FLOOR

分别为向上取整和向下取整
或者说CEIL为取大于该数的最小整数
FLLOR为取小于该数的最大整数

SELECT CEIL(45.678) FROM dual;
SELECT FLOOR(45.678) FROM dual;

结果:
46
45

<think>好的,用户想了解如何在Oracle数据库中将字符串转换为数值,特别是使用TO_NUMBER函数的方法和示例。首先,我需要回顾一下TO_NUMBER函数的基本定义和语法。根据引用[^1],TO_NUMBER是一个类型转换函数,用于将字符串转换为数值类型。接下来,要说明函数的语法结构,包括主要的参数:string_expr和可选的format_mask、nls_params。 然后,需要提供一些基本的用法示例,比如直接转换简单的数字字符串,比如'123.45',这样用户可以看到最基本的应用。接着,处理带有特定格式的字符串,比如千位分隔符,这时候需要用到format_mask参数,例如将'1,234.56'转换为数值,FORMAT参数应该是'9,999.99'。同时,要提醒用户注意格式匹配,避免格式不匹配导致的错误。 另外,用户可能会遇到需要处理货币符号的情况,比如'$789.01',这时候FORMAT参数应包含货币符号,如'$999.99'。这时候需要强调格式中的符号必须与字符串中的符号一致,否则转换会失败。 还要考虑用户可能不知道如何处理科学记数法的情况,比如'5.67E+02',这时候不需要FORMAT参数,直接使用TO_NUMBER即可转换。这部分可以作为一个示例展示。 然后需要提到常见的错误情况,比如字符串不符合格式要求或者包含非数字字符,这时候Oracle会报错,比如ORA-01722。需要建议用户使用异常处理来捕获这些错误,例如在PL/SQL中使用EXCEPTION块。 此外,用户可能还想知道其他相关的转换函数,比如TO_CHAR和TO_DATE,但这里主要关注TO_NUMBER。根据引用[^2]和[^3],虽然TO_CLOB和MySQL的DATE_FORMAT函数被提及,但当前问题不需要深入这些,但可以简要提及作为对比。 最后,生成相关问题,帮助用户扩展知识,比如性能优化、异常处理、替代方法,以及与其他数据库的对比,如引用提到的MySQL函数。这些问题需要自然相关,帮助用户进一步探索。 总结步骤:介绍函数定义,语法,基本示例,格式处理示例,错误处理,相关函数对比,生成问题。确保所有数学表达式使用正确的LaTeX格式,如$5.67 \times 10^2$,并检查语法正确性。使用中文回答,结构清晰,分点说明。</think>### Oracle 数据库中将字符串转换为数值的方法 在 Oracle 数据库中,将字符串转换为数值主要通过 **`TO_NUMBER`** 函数实现。以下是详细的使用方法和示例: --- #### 1. **函数语法** ```sql TO_NUMBER( string_expr -- 需要转换的字符串表达式 [, format_mask] -- 可选,指定字符串的格式(如千位分隔符、小数点符号等) [, nls_params] -- 可选,指定本地化参数(如货币符号、日期格式等) ) ``` --- #### 2. **基本用法示例** **示例1:直接转换纯数字字符串** ```sql SELECT TO_NUMBER('123.45') AS result FROM dual; ``` **输出**:`123.45` 说明:若字符串仅包含数字和小数点,可直接转换。 **示例2:处理带格式的字符串** ```sql SELECT TO_NUMBER('1,234.56', '9,999.99') AS result FROM dual; ``` **输出**:`1234.56` 说明:使用 `format_mask` 匹配字符串中的千位分隔符和小数点。 **示例3:处理带货币符号的字符串** ```sql SELECT TO_NUMBER('$789.01', '$999.99') AS result FROM dual; ``` **输出**:`789.01` 注意:格式中的 `$` 必须与字符串中的符号一致。 --- #### 3. **处理科学记数法** 若字符串为科学记数法(如 `5.67E+02`),无需指定格式: ```sql SELECT TO_NUMBER('5.67E+02') AS result FROM dual; ``` **输出**:`567` --- #### 4. **错误处理** 若字符串不符合格式要求,会抛出 `ORA-01722: invalid number` 错误。可通过异常处理捕获: ```sql BEGIN DBMS_OUTPUT.PUT_LINE(TO_NUMBER('12A3', '9999')); -- 包含非数字字符 EXCEPTION WHEN VALUE_ERROR THEN DBMS_OUTPUT.PUT_LINE('转换失败'); END; ``` --- #### 5. **与其他函数的对比** - **`TO_CHAR`**:将数值转换为字符串,支持格式化输出。 - **`CAST`**:通用类型转换函数,例如 `CAST('123.45' AS NUMBER)`。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值