oracle怎么在数字列中添加空格

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle怎么在数字列中添加空格相关的知识,希望对你有一定的参考价值。

例:列值:888997.78
用sql语句,最终输出:8 8 8 9 9 7 . 7 8的效果,就是在每个数字中都放一个空格包括点

SQL> SELECT regexp_replace(888997.78,'(\\d|.)','\\1 ') col FROM dual;
 
COL
------------------
8 8 8 9 9 7 . 7 8
 
SQL>

 后面的 \\1 是引用正则表达式的第一个组

参考技术A SELECT trim(regexp_replace(888997.78,'(\d|.)','\1 ')) col FROM dual;
搞个变量传入,可以实现任何数字的处理吧
参考技术B select regexp_replace(12.67, '(.)(.)(.)(.)(.)', '\1 \2 \3 \4 \5') from dual;
select regexp_replace(123.678, '(.)(.)(.)(.)(.)(.)(.)', '\1 \2 \3 \4 \5 \6 \7') from dual;
位数不定就不好弄啊

编译触发器时出现 Oracle 错误 ORA-00922

【中文标题】编译触发器时出现 Oracle 错误 ORA-00922【英文标题】:Oracle Error ORA-00922 While Compiling Trigger 【发布时间】:2020-08-17 13:49:25 【问题描述】:

我在表中有一个 varchar2 数据类型列。用户只能在该列中插入数字,我不想更改为数字。有时在手动插入此列的数据时,用户可以在列中留出空格。我创建了一个触发器来避免它。我写的触发器如下。

CREATE OR REPLACE trigger_name
BEFORE INSERT ON table
FOR EACH ROW 
BEGIN 
  IF :new.column != TRIM(:new.column) THEN
     :new.column := TRIM(:new.column);
  ELSE
   dbms_output.put_line(:new.column || ' is suitable for jobid');
END IF;
END;

编译上述代码时出现如下错误。

“ORA-00922:缺少或无效选项”

提前致谢。

【问题讨论】:

不幸的是,它不断出错。我也删除了 8 号末尾的分号,但我无法修复它。 首先,我只删除了第 6 次,但出现错误。然后我也删除了第8个,但是我又出错了。 对不起,我看错了,在 CREATE OR REPLACE 之后缺少 TRIGGER 关键字的语法存在问题,我认为表名应该是一个代表。由于无法创建名称为 table 的表。您需要该列的浮点数,还是只需要数字(整数)? 不客气。如果您坚持不更改数据类型,我认为添加检查约束可能比使用触发器更好。您需要该列的浮点数,还是只需要数字(整数)? 您的触发器不会从输入的数据中删除所有空格;使用时,TRIM 会删除前导和尾随空格。但是,第一个数字和最后一个数字之间不会有任何空格。所以字符串'123'变成'123',字符串'12 3'没有,空格仍然存在。另外,您如何使用户无法输入其他非数字字符。如果你能做到这一点,为什么不也不允许进入空间。顺便说一句,您的触发器可以简化为单行 :new.column := trim(:new.column); 以产生完全相同的结果,除了开发之外没人会看到的消息. 【参考方案1】:

错误ORA-00922是由缺少关键字TRIGGER引起的,正如Barbaros Özhan所指出的那样。只需添加它,假设您的表名和列名正确,那么就可以了。


但进一步查询,您似乎想替换用户为该列输入的所有空格。如果是这样,这个触发器可以做到:

CREATE OR REPLACE TRIGGER trigger_name
BEFORE INSERT ON table_name
  FOR EACH ROW
BEGIN
  IF :new.column_name != REPLACE(:new.column_name,' ','') THEN
    :new.column_name := REPLACE(:new.column_name,' ','');
  ELSE
    dbms_output.put_line(:new.column_name|| ' is suitable for jobid');
  END IF;
END;

我添加了缺少的关键字trigger。 只需将 table_namecolumn_name 替换为正确的名称即可。

【讨论】:

以上是关于oracle怎么在数字列中添加空格的主要内容,如果未能解决你的问题,请参考以下文章

oracle中如何取消列值中的空格

oracle用一个空格更新一列中的多个空格

oracle怎么去掉字符串的空格的数据

如何删除数据框列中的空格并向其添加字符串“NA”?

oracle如何去除某个字段中两边的空格

删除熊猫数据框中“标签”列中出现数字后的空格