[Oracle] TO_NUMBER()函数

TO_NUMBER()函数是Oracle中常用的类型转换函数,是将一些处理过的按一定格式编排过的字符串变回数值型的格式

常用于将文本文件或用户输入中的数字字符串转换为可计算的数值以及处理带有货币符号、千位分隔符等格式的数值字符串

语法结构

sql 复制代码
TO_NUMBER(converted_str, format, nls_parameters)

参数说明

converted_str:要转换为数字的字符串

format:指定字符串中的格式 (可选)

nls_parameters:指定国家语言支持参数,如小数点和千位分隔符 (可选)

format参数常用预定义的的固定格式

|---------|------------|
| 格式值 | 含义 |
| 9 | 代表一个数字 |
| $ | 显示美元符号 |
| . | 显示一个小数点 |
| D | 显示一个小数点 |
| , | 显示一个千位分隔符号 |
| G | 显示一个千位分隔符号 |

示例

sql 复制代码
SELECT TO_NUMBER('1234.56') FROM dual;  -- 1234.56

SELECT TO_NUMBER('$1,234.56', '$9,999.99') FROM dual;  -- 1234.56

-- 1234.56 (将逗号识别为小数点,点识别为千位分隔符)
SELECT TO_NUMBER('1.234,56', '9G999D99', 'NLS_NUMERIC_CHARACTERS='',.''') 
FROM dual;

-- 进制转换:16进制转换为10进制
SELECT TO_NUMBER('f','xx') FROM dual;     -- 15
SELECT TO_NUMBER('19f','xxx') FROM dual;  -- 415
sql 复制代码
-- 报错
SELECT TO_NUMBER('$12345.678', '$99999.99') FROM dual;
-- 12345.678
SELECT TO_NUMBER('$12345.678', '$99999.999') FROM dual;

提示Tips

1.format参数可以使用 D(小数点)、G(千位分隔符)、$(货币符号)等格式元素

2.需要注意的是,被转换的字符串必须符合数值类型的格式,如果被转换的字符串不符合数值型格式,Oracle将抛出错误提示

TO_NUMBER()函数获取Oracle数据库当前日期的年、月、日、时、分、秒

sql 复制代码
-- 年
SELECT TO_NUMBER(TO_CHAR(sysdate,'yyyy')) FROM dual;  
-- 月
SELECT TO_NUMBER(TO_CHAR(sysdate,'mm')) FROM dual;    
-- 日
SELECT TO_NUMBER(TO_CHAR(sysdate,'dd')) FROM dual;    
-- 时(24小时制)
SELECT TO_NUMBER(TO_CHAR(sysdate,'hh24')) FROM dual;  
-- 分
SELECT TO_NUMBER(TO_CHAR(sysdate,'mi')) FROM dual; 
-- 秒
SELECT TO_NUMBER(TO_CHAR(sysdate,'ss')) FROM dual; 
相关推荐
得物技术26 分钟前
破解gh-ost变更导致MySQL表膨胀之谜|得物技术
数据库·后端·mysql
Raymond运维5 小时前
MariaDB源码编译安装(二)
运维·数据库·mariadb
沢田纲吉5 小时前
🗄️ MySQL 表操作全面指南
数据库·后端·mysql
RestCloud20 小时前
SQL Server到Hive:批处理ETL性能提升30%的实战经验
数据库·api
RestCloud21 小时前
为什么说零代码 ETL 是未来趋势?
数据库·api
ClouGence1 天前
CloudCanal + Paimon + SelectDB 从 0 到 1 构建实时湖仓
数据库
DemonAvenger1 天前
NoSQL与MySQL混合架构设计:从入门到实战的最佳实践
数据库·mysql·性能优化
AAA修煤气灶刘哥2 天前
后端人速藏!数据库PD建模避坑指南
数据库·后端·mysql
RestCloud2 天前
揭秘 CDC 技术:让数据库同步快人一步
数据库·api
得物技术2 天前
MySQL单表为何别超2000万行?揭秘B+树与16KB页的生死博弈|得物技术
数据库·后端·mysql