oracle删选字段中不是数字的数据
时间: 2023-09-06 16:00:35 浏览: 133
在Oracle中,我们可以使用正则表达式来筛选字段中不是数字的数据。
首先,我们可以使用正则表达式函数`REGEXP_LIKE`来查找不是数字的数据。该函数接受三个参数:要查找的字段、正则表达式以及可选的标志。为了查找不是数字的数据,我们可以使用`[^0-9]`作为正则表达式,表示匹配不是数字的任何字符。
接下来,我们可以将该函数应用于`WHERE`子句来筛选出不是数字的数据。例如,假设我们有一个名为`column_name`的字段,我们可以使用以下查询来得到不是数字的数据:
```
SELECT column_name
FROM table_name
WHERE REGEXP_LIKE(column_name, '[^0-9]');
```
以上查询将返回所有`column_name`字段中不是数字的数据。
另外,如果我们希望得到仅包含数字的数据,我们可以在正则表达式中使用`^`和`$`符号来指定字符串的开始和结束位置。例如,如果我们希望返回只包含数字的数据,可以使用以下查询:
```
SELECT column_name
FROM table_name
WHERE NOT REGEXP_LIKE(column_name, '^[0-9]+$');
```
以上查询将返回所有`column_name`字段中只包含数字的数据。
总之,我们可以使用正则表达式函数`REGEXP_LIKE`来筛选出字段中不是数字的数据,以及只包含数字的数据。
相关问题
oracle中通过编码字段中的-,然后对筛选到的数字的名称字段中的数据后面添加(旧)
在Oracle数据库中,如果你有一个编码字段(如编码ID,EncodedField)存储了数据,并且这些数据可能是负数表示某个状态,比如-1代表"旧"的状态,你可以通过SQL查询来筛选出这些负数值,并在结果集中对应的状态名称字段(NameField)后面自动加上“(旧)”。
首先,你需要确保你的编码规则明确,例如-1确实代表旧的数据。假设你的编码字段是整型,你可以编写这样的查询:
```sql
SELECT NameField,
CASE WHEN EncodedField = -1 THEN CONCAT(Decode(EncodedField, -1, '旧', NULL), ' (旧)') ELSE Decode(EncodedField, EncodedField, '新', NULL) END AS Status
FROM YourTable;
```
在这个查询中,`Decode`函数用于将编码值转换为其对应的名称(如果存在)。对于-1,我们直接连接字符串'旧'和'(旧)';对于非-1的值,我们只显示名称(如果没有其他特定处理的话,默认认为非-1的是新的状态)。
oracle数据库,库名:zdtybm,涉及到的字段有JLSJ(该字段使用到月份筛选,字段类型date),zddm,需要实现zddm数据的count总数、统计最新的12个月的数据、月份字段中的数据以数字形式显示、按月份统计,每个月只统计每个月新增的数据
在Oracle数据库中,你可以使用`DATE_TRUNC`函数结合`LAG`函数来实现对`zdtybm`库中的`zddm`字段进行计数并仅统计最新12个月的数据,同时将月份转换为数字形式。以下是相应的SQL查询示例:
```sql
WITH months_data AS (
SELECT
DATE_TRUNC('MONTH', JLSJ) AS month_num, -- 转换为月份
COUNT(DISTINCT zddm) OVER (PARTITION BY EXTRACT(YEAR_MONTH FROM JLSJ)) AS monthly_count, -- 新增数据计数
LAG(month_num, 1) OVER (ORDER BY JLSJ) AS prev_month_num -- 前一个月的月份数
FROM zdtybm
WHERE JLSJ IS NOT NULL
)
SELECT
month_num,
COALESCE(monthly_count, 0) AS count -- 处理第一个月可能存在无前月的情况
FROM
(
SELECT * FROM months_data
WHERE month_num = ADD_MONTHS(CURRENT_DATE, -12) -- 获取最新12个月的数据
) subquery
WHERE
NVL(prev_month_num, DATE_TRUNC('MONTH', SYSDATE - INTERVAL '1 MONTH')) + 1 = month_num -- 检查是否为新添加的数据
ORDER BY
month_num;
```
这个查询首先计算每个月份的新增`zddm`记录数,并通过`LAG`获取上一月的月份数。然后,它过滤出最新12个月的数据,并检查当前月数是否是上个月加1,以此确定是否是新增的数据。
阅读全文