PL/SQL对含有小数的数据进行排序(附上:正则表达式解读)

本文介绍如何使用SQL中的REGEXP_SUBSTR和TO_NUMBER函数结合正则表达式对包含小数的单元价格进行降序排序。详细解析了REGEXP_SUBSTR函数的用法及其参数设置,并解释了正则表达式‘(d+.d+)’的具体含义。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ORDER BY to_number(regexp_substr(<列名>,<正则表达式>,<起始数字>)) desc

例如将下列数据进行降序排序:

在这里插入图片描述

SELECT UNIT_PRICE FROM STOCK
ORDER BY TO_NUMBER(REGEXP_SUBSTR(UNIT_PRICE,'(\d+.\d+)',1)) DESC;

或者

SELECT UNIT_PRICE FROM STOCK
ORDER BY TO_NUMBER(REGEXP_SUBSTR(UNIT_PRICE,('([0-9]+.[0-9]+)',1)));

查询结果如下:

在这里插入图片描述
附上:对ORDER BY 表达式的解答:正则表达式和REGEXP_SUBSTR()函数。

ORDER BY to_number(regexp_substr(<列名>,’(\d+.\d+)’,1)) desc

这里运用了正则表达,字符截取,即REGEXP_SUBSTR()函数。

一、REGEXP_SUBSTR()函数——regexp_substr()函数

函数的输出值的类型是:VARCHAR类型

REGEXP_SUBSTR()函数的基本表达式:
REGEXP_SUBSTR ( source_string, pattern [, position [, occurrence [, parameters ] ] ] )

REGEXP_SUBSTR ( <列名>, <SQL标准正则表达式函数> [, <数字,开始搜索位置默认为1> [, <数字,出现位置默认为1,小于1或大于字符串长度则值为空> [, <一个或多个字符串,参数,值为c/i/e/p> ] ] ] )

<参数>:
c:默认值,使用区分大小写的匹配,匹配时,P=p。
i:不区分大小写的匹配,匹配时,P<>p。
e:如果<SQL标准正则表达式函数>有字符串表达式,会使用第一个子表达式来匹配列数据,如果<SQL标准正则表达式函数>中没有字符串表达式,就忽略e。
p:使用Perl兼容正则表达式(PRGC)方言解释模式。

二、to_number()函数:将字段的类型转换为数值型。
REGEXP:正则表达式(regular expression)
SUBSTR:字符截取函数

三、要理解正则表达式:’(\d+.\d+)’

首先需要了解如下关于正则表达式常识:
(1)\d:匹配一个数字字符,等价于[0-9];
(2)\D:匹配一个非数字字符,等价于[^0-9]
(3)|:“或”操作,使字符具有高于替换运算的优先级。
例如:“m|food”匹配“m”和"food";“(m|f)ood”匹配“mood”和"food"字符。
(4)+:匹配字符串一次或者多次。
例如:‘zo+’能匹配“zo”和“zoooo”,但是不能匹配“z”。等价于{1,}。
(5){1,}:至少匹配前面的字符串一次。
{n,}:n是个非负整数,至少匹配n次。例如:‘o{2,}’不能匹配“Bob”,但是可以匹配"Boob"和“Boooooob”中的所有o。‘o{1,}’等价于‘o+’,‘o{0,}’等价于‘o*’。
(6)* :匹配前面的字符表达式0次或者多次。
例如:zo* 可以匹配“zoo”和“z",等价于{0,}。

四、由此可以理解 '(\d+.\d+)'的含义了:
匹配小数点前的数字字符串至少一次,小数点,匹配小数点后的数字字符串至少一次。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值