如何在Oracle SQL中排除含百分号(%)的数据值
Oracle SQL 处理带百分号的字符串列
排除末尾带百分号的行
由于%在LIKE语句中是通配符,匹配实际的%字符需要用转义处理,或者直接通过字符串函数判断:
- 方法1:LIKE + 转义符
SELECT column_a FROM your_table WHERE column_a NOT LIKE '%\%' ESCAPE '\';
这里用ESCAPE '\'指定反斜杠为转义符,\%就代表真实的%符号,'%\%'会匹配所有末尾是%的字符串,NOT LIKE就排除这些行。
- 方法2:SUBSTR判断最后一位
更简单的方式是直接取字符串最后一个字符判断:
SELECT column_a FROM your_table WHERE SUBSTR(column_a, -1) != '%';
如果要排除**所有包含%**的行(不管位置),用INSTR更高效:
SELECT column_a FROM your_table WHERE INSTR(column_a, '%') = 0;
将字符串数字统一格式为小数点后两位
因为源数据是字符串类型,无法直接用ROUND,可先转成数字再格式化回字符串:
-- 先排除带%的行,再格式化为两位小数 SELECT TO_CHAR(TO_NUMBER(column_a), 'FM999999999.00') AS formatted_column_a FROM your_table WHERE SUBSTR(column_a, -1) != '%';
TO_NUMBER(column_a):把合法的字符串数字转成数值类型TO_CHAR(..., 'FM999999999.00'):格式化回字符串,.00确保保留两位小数(不足补零),FM用来去掉格式化后多余的前导空格。
如果你的需求是去掉百分号而非排除,可以先替换掉%再处理:
SELECT TO_CHAR(TO_NUMBER(REPLACE(column_a, '%', '')), 'FM999999999.00') AS formatted_column_a FROM your_table;
内容的提问来源于stack exchange,提问作者bjl042
相关产品推荐
相关产品推荐

