请帮忙这个表情
如果中间名长度大于1,则firstname附加中间名,中间名为null。如果中间名长度=1,则仅使用中间名和名字拆分到空格之前。Firstname的搜索应该从逗号(,)开始,第三个场景应该匹配。
有人能解释一下吗?
select lastN,
case when length(midN) = 1 then midN end as midN,
firstN || case when length(midN) > 1 then ' ' || midN end as firstN
from ( select regexp_substr('BOULAY d,STEPHEN', '([^,]+),', 1, 1, '', 1) as lastN,
regexp_substr('BOULAY d,STEPHEN', ',([^ ]+)', 1, 1, '', 1) as firstN,
regexp_substr('BOULAY d,STEPHEN', ' (.+)', 1, 1, '', 1) as midN
from dual );
在此查询中,我已经实现了前2个场景,但对于第3个场景,它失败了。
使用REGEXP\u SUBSTR
可以使用^
作为字符串的开始,使用$
作为字符串的结束。
使用像“%”这样的全名来确定结尾的空白后面是否只有一个字符。(如果您更喜欢的话,当然也可以像使用REGEXP_一样。)
select
case when fullname like '% _'
then regexp_substr(fullname, '([^,]+) .$', 1, 1, 'i', 1)
else regexp_substr(fullname, '[^,]+$')
end as first_name,
case when fullname like '% _'
then regexp_substr(fullname, '.$')
else ''
end as middle_name,
regexp_substr(fullname, '^[^,]+') as last_name
from mytable;
演示:https://dbfiddle.uk/?rdbms=oracle_18
你也可以试试这个:
^ --> Finds regex that must match at the beginning of the line
$ --> Finds regex that must match at the end of the line.
\w --> A word character, short for [a-zA-Z_0-9]
\s --> A whitespace character, short for [ \t\n\x0b\r\f]
函数长度(regexp\u substr(全名,“,\w\s*(\w*)$”,1,1,“,,1))返回中间名路径的长度(如果存在)。
with your_table (Fullname) as (
select 'SZAFLARSKI,ANDRZEJ S' from dual union all
select 'SZAFLARSKI,ANDRZEJ Santa' from dual union all
select 'SZAFLARSKI rel,ANDRZEJ' from dual
)
select Fullname
, case when length(regexp_substr(Fullname, ',\w+\s*(\w*)$', 1, 1, '', 1)) > 1
then regexp_substr(Fullname, ',([^,]+)$', 1, 1, '', 1)
else regexp_substr(Fullname, ',(\w+)\s*\w*$', 1, 1, '', 1)
end FirstName
, case when length(regexp_substr(Fullname, ',\w+\s*(\w*)$', 1, 1, '', 1)) > 1
then null
else regexp_substr(Fullname, ',\w+\s*(\w*)$', 1, 1, '', 1)
end middleName
, regexp_substr(Fullname, '^[^,]+', 1, 1)Lastname
from your_table
;
DB
我对将全名分为名字和姓氏的功能感到困惑。例如,我有这些记录 我期待这样的结果 你能帮我吗?谢谢
问题内容: 我有一个客户列表,其名称为全名。我想创建一个将全名作为参数并分别返回名字和姓氏的函数。如果不可能,我可以有两个单独的函数,一个返回名字,另一个返回姓氏。全名列表包含最多三个单词的名称。我想要的是: 全名由两个词组成时。第一个应该是名称,第二个应该是姓氏。 当一个全名由三个词组成时。第一个单词和中间单词应为名字,第三个单词应为姓氏。 例子:- 结果:- 我搜索并找到了无法按预期运行的解决
我怎么能把字典分成两个列表,一个键,一个值。例如采取: 并将其分为: 有什么想法吗,伙计们?
问题内容: 假设我有一个如下所示的Javascript数组: 什么方法适合将数组分块(拆分)为更小的数组,最多可以有10个元素? 问题答案: 该array.slice方法可以从一开始,中间,或自己需要的任何目的数组的结束提取切片,在不改变原来的数组。
问题内容: 我有桌子: 我想要这样的输出: 问题答案: 如果可以创建一个数字表,其中包含从1到要拆分的最大字段的数字,则可以使用以下解决方案: 请看这里的小提琴。 如果无法创建表,则解决方案可以是: 这里有个小提琴例子。
问题内容: 我有一个具有这种结构的表。 我无法弄清楚我将使用哪种SQL查询来获得这样的结果集: 我正在尝试将三列分为三个单独的行。这可能吗? 问题答案: SELECT Y.UserID, Y.UserName, QuestionName = ‘AnswerToQuestion’ + X.Which, Response = CASE X.Which WHEN ‘1’ THEN AnswerToQue