如何更新 Oracle 表字段中的特定字符位置


How to update specific character positions in an Oracle table field?

我的表格中有一个 14 位的数字字段。我想像这样更新所有数字:

50108899772727 变为 5010889977*27*27,其中 * 位置将填充 0(零)。总数字变为 16。

请分享一些想法,我怎样才能实现我的目标。

(?='d{4}$)|(?='d{2}$)

试试这个。替换为 * 。请参阅演示。

https://regex101.com/r/vD5iH9/34

$re = "/(?=''d{4}$)|(?=''d{2}$)/m";
$str = "50108899772727";
$subst = "*";
$result = preg_replace($re, $subst, $str);

没有正则表达式的方式

$str=50108899772727;
$arr = str_split($str, 2);
$arr[count($arr)-2].="0";
$arr[count($arr)-3].="0";
$str=implode("",$arr);

我有一个 14 位数字字段

由于您有一个数值字段,因此必须显式使用 to_char 来执行任何字符串操作。然后使用to_number将其转换回数字

使用简单的 SUBSTR 将比 REGEXP 更快。

SQL> WITH DATA AS
  2    ( SELECT 50108899772727 num FROM dual
  3    )
  4  SELECT to_number( SUBSTR(TO_CHAR(num), 1, 10)
  5    ||'0'
  6    || SUBSTR(TO_CHAR(num), 11, 2)
  7    ||'0'
  8    || SUBSTR(TO_CHAR(num), 13) ) num
  9  FROM DATA
 10  /
             NUM
----------------
5010889977027027
SQL>

您可以使用相同的方法来更新表。

编辑 将谓词添加到查询以筛选不必要的更新。

UPDATE table_name
 SET column_name = to_number( SUBSTR(TO_CHAR(column_name), 1, 10)
  ||'0'
  || SUBSTR(TO_CHAR(column_name), 11, 2)
  ||'0'
  || SUBSTR(TO_CHAR(column_name), 13) )
   FROM TABLE
  WHERE LENGTH(column_name) = 14
/