【发布时间】:2017-07-04 22:48:07
【问题描述】:
我想在 Oracle 查询中查找 varchar2(在字符串中)中最长的单词。在某些情况下,我会将字符串拆分为表格中的单独单词,然后聚合函数可以解决它(例如,一旦我有 max(length(my_field) 我可以追踪最长的单词)。
但在这种情况下,我没有那么奢侈。所以我需要在不聚合的情况下计算字符串中最长的单词。
我找到了一种使用 REGEXP_REPLACE 查找长度超过 N 个字符的单词的方法。这还不错。但我没有看到使用正则表达式或任何其他函数来查找最长单词的方法。
这是我用来查找超过 4 个字符的单词的简化版本:
select
regexp_replace(
' a cd efg hijk lmnop qrst uvw xy z '
, '([^[:alnum:]][[:alnum:]]{1,3}[^[:alnum:]])'
, ' '
, 1
, 0
) x
from dual;
但是我怎样才能只返回最长的单词呢?
【问题讨论】:
-
我只能想到使用子字符串作为正则表达式很难。
-
如果您打算在不使用 PL/SQL 的情况下将字符串拆分为单词,这可能是您唯一的选择。
-
这还不清楚。如果超过一个单词并列最长,您要全部返回吗?如果您的字符串具有相同长度的所有单词,比如说 7 个字符 - 如果不是在单独的行中,您如何建议“返回”它们?所以你不必把绳子分开吗?你说的“没有那种奢侈”是什么意思?哪种奢侈品?