我有一个名为X的字段(Oracle中的列),其值为"a1b2c3","abc","1ab","123","156"
我如何编写一个sql查询,只返回保存纯数值=没有字母的X?从上面的例子可以是"123"和"156"
从myTable中选择X哪里......?
cod*_*ict 62
您可以使用以下REGEXP_LIKE功能:
SELECT X
FROM myTable
WHERE REGEXP_LIKE(X, '^[[:digit:]]+$');
Run Code Online (Sandbox Code Playgroud)
样品运行:
SQL> SELECT X FROM SO;
X
--------------------
12c
123
abc
a12
SQL> SELECT X FROM SO WHERE REGEXP_LIKE(X, '^[[:digit:]]+$');
X
--------------------
123
SQL>
Run Code Online (Sandbox Code Playgroud)
Ton*_*ews 30
如果要考虑的唯一字符是字母,那么你可以这样做:
select X from myTable where upper(X) = lower(X)
Run Code Online (Sandbox Code Playgroud)
但当然,这不会过滤掉其他字符,只是字母.
如果您使用Oracle 10或更高版本,则可以使用readxp函数作为codaddict建议.在早期版本中,translate函数将帮助您:
select * from tablename where translate(x, '.1234567890', '.') is null;
Run Code Online (Sandbox Code Playgroud)
有关Oracle翻译功能的更多信息可以在此处或官方文档"SQL Reference"中找到
UPD:如果您的数字中有符号或空格,则可以+-在translate函数的第二个参数中添加" "字符.
那1.1E10,+ 1,-0等呢?解析所有可能的数字比许多人想象的要复杂。如果要包含尽可能多的数字,则应在PL / SQL函数中使用to_number函数。来自http://www.oracle-developer.net/content/utilities/is_number.sql:
CREATE OR REPLACE FUNCTION is_number (str_in IN VARCHAR2) RETURN NUMBER IS
n NUMBER;
BEGIN
n := TO_NUMBER(str_in);
RETURN 1;
EXCEPTION
WHEN VALUE_ERROR THEN
RETURN 0;
END;
/
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
153273 次 |
| 最近记录: |