使用SQL在Oracle中搜索并显示字符串中的所有字符串[关闭]

7jmck4yq  于 2023-11-17  发布在  Oracle
关注(0)|答案(3)|浏览(127)

**已关闭。**此问题需要debugging details。目前不接受回答。

编辑问题以包括desired behavior, a specific problem or error, and the shortest code necessary to reproduce the problem。这将帮助其他人回答问题。
18天前关门了。
Improve this question
我有以下字符串/char/varchar:

'abhuvuyvvBDUYWGFEGFkmnxsjanchbYYSG'

字符串
如何编写一个SQL语句,使用Oracle中的SQL从上述字符串中只提取10个字符:
所需输出:

B
D
U
Y
W
G
F
E
G
F
Y
Y
S
G

aelbi1ox

aelbi1ox1#

类似于Barbaros建议的(分层查询),但如果您的字符集不是ASCII,则可能会更安全一些。例如,条件(ASCII值在65和90之间,无法 * 捕获 * 克罗地亚大写字母)。

with test (col) as
  (select 'ĐŠŽĆČabhuvuyvvBDUYWGFEGFkmnxsjanchbYYSG' from dual)
select substr(col, level, 1) result
from test
where substr(col, level, 1) = upper(substr(col, level, 1))
connect by level <= length(col);

字符串
请参阅fiddle

ubbxdtey

ubbxdtey2#

您可以使用分层查询沿着SUBSTR(),以便逐个读取字母,同时通过ASCII()函数确定它们的数值,以适合以下范围

WITH t(col) AS
(
 SELECT 'abhuvuyvvBDUYWGFEGFkmnxsjanchbYYSG' FROM dual
)
 SELECT SUBSTR(col,level,1) AS result
   FROM t
  WHERE ASCII(SUBSTR(col,level,1)) BETWEEN 65 AND 90 -- interval for uppercase letters of English alphabet
 CONNECT BY level <= LENGTH(col)

字符串

vktxenjb

vktxenjb3#

如果您只想在只包含大小写混合字母字符的列中使用大写字符,则用途:

SELECT TRANSLATE(
         column_name,
         'Aabcdefghijklmnopqrstuvwxyz',
         'A'
       ) AS upper_case_characters
FROM   table_name;

字符串
或者,对于任何字符(但它会比使用TRANSLATE慢):

SELECT REGEXP_REPLACE(
         column_name,
         '[^[:upper:]]'
       ) AS upper_case_characters
FROM   table_name;


其中,对于样本数据:

CREATE TABLE table_name (column_name) AS
SELECT 'abhuvuyvvBDUYWGFEGFkmnxsjanchbYYSG' FROM DUAL;


两个输出:
| 大写字符|
| --|
| BDUYWGFEGFYYSG|
如果你想在每个大写字符之间都有一个回车符,那么:

SELECT TRIM(
         BOTH CHR(10) FROM
         REGEXP_REPLACE(
           column_name,
           '[^[:upper:]]*([[:upper:]])?',
           CHR(10) || '\1'
         )
       ) AS upper_case_characters
FROM   table_name;


其输出:
| 大写字符|
| --|
| B D U Y W G F E G F Y Y S G|
fiddle

相关问题