oracle 当我返回一个sql列时,有没有一种方法可以只反转数字?(希伯来文)

5vf7fwbs  于 2023-10-16  发布在  Oracle
关注(0)|答案(3)|浏览(115)

我在一个表中有一列包含伪地址-街道名称和号码。地址是希伯来文的:但是我想返回相同的地址,但只是颠倒了号码:我不确定这与此有关-但该列是VARCHAR 2(56),NLS_CHARACTERSET IW 8ISO 8859 P8

create table a (address VARCHAR2(56));

insert into  a (address) values ('ביאליק 23');

select 'return the full address but reverse only the numbers' from a;
tnkciper

tnkciper1#

假设街道地址总是首先出现,我们可以尝试使用正则表达式子字符串操作沿着REVERSE()字符串函数:

SELECT
    REVERSE(REGEXP_SUBSTR(address, '([0-9]+)$', 1, 1, NULL, 1)) || ' ' ||
    REGEXP_SUBSTR(address, '(.*) [0-9]+$', 1, 1, NULL, 1) AS new_address
FROM a;
h5qlskok

h5qlskok2#

这个解决了

select REGEXP_REPLACE(address,'[^[:alpha:]]') || ' ' || reverse(regexp_replace(address, '[^[:digit:]]', '')) from a;

谢谢你

6xfqseft

6xfqseft3#

您可以使用一些字符串操作函数(如substr()instr()reverse())来完成此操作
查询方式:

SELECT SUBSTR(address, 0, INSTR(address, ' ') ) || REVERSE(SUBSTR(address, INSTR(address, ' ') + 1)) as reversed_address
  FROM a;

输出量:
| 反向地址|
| --|
| בליק 32 |
fiddle
如果有可能在字符串中间有数字,那么下面的方法将是合适的:
查询方式:

SELECT
    REGEXP_REPLACE(address, '(\d+)', REVERSE(REGEXP_SUBSTR(address, '\d+'))) AS reserved_address
FROM
    a;

输出量:
| 预订_地址|
| --|
| ביאליק 32 |
| ADDR 87 SS|
fiddle

相关问题