我的表中有一个 NVARCHAR 字段。(使用Oracle 11g)
我想检查它有字符数据或数字数据。
帮我写一个选择查询。(使用 PL-SQL)
我想我可以用案例来写它,但我无法实现它。(我没有方法检查 isChar 和 isNumber)
select
case <myField>
when <isChar> then
<this is a char data>
when <IsNum> then
<this is number data>
End
from <myTable>
Run Code Online (Sandbox Code Playgroud)
使用REGEXP_LIKE
SELECT t.*,
CASE
WHEN REGEXP_LIKE(column1, '^[0-9]+$') THEN 'Numeric'
ELSE 'Char'
END data_type
FROM table1 t;
Run Code Online (Sandbox Code Playgroud)
没有它
SELECT t.*,
CASE
WHEN LENGTH(TRIM(TRANSLATE (column1, '0123456789',' '))) IS NULL THEN 'Numeric'
ELSE 'Char'
END data_type
FROM table1 t;
Run Code Online (Sandbox Code Playgroud)
这是SQLFiddle演示
如果需要,两个版本都可以调整以适应句号、加号和减号
更新NULL正如@tbone正确注释的那样,当column1的值为 时,这些查询不考虑s 并分别返回“Char”和“Numeric”作为 data_type NULL。
至少有两种处理方法:
首先,NULL如果我们对值不感兴趣,则简单地过滤掉具有值的行
...
WHERE column1 IS NOT NULL
Run Code Online (Sandbox Code Playgroud)
其次引入NULL(显然它可以是“N/A”或其他)数据类型CASE
SELECT t.*,
CASE
WHEN column1 IS NULL THEN NULL
ELSE CASE
WHEN REGEXP_LIKE(column1, '^[0-9]+$') THEN 'Numeric'
ELSE 'Char'
END
END data_type
FROM table1 t
Run Code Online (Sandbox Code Playgroud)
这是更新的SQLFiddle演示
| 归档时间: |
|
| 查看次数: |
28744 次 |
| 最近记录: |