Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 在Oracle中解析字符串中的第二个单词_Sql_Oracle10g - Fatal编程技术网

Sql 在Oracle中解析字符串中的第二个单词

Sql 在Oracle中解析字符串中的第二个单词,sql,oracle10g,Sql,Oracle10g,我需要编写一点SQL来解析任何给定字符串的第二个字,或者如果没有空格,则解析整个字符串 逻辑是 “XXX-yyy-ZZZZZ”将返回yyy “XXX YYY”将返回YYY和 “XXXXXX”将返回XXXXXX 有什么建议吗?有没有办法使用SUBSTR和字符串中的2个位置?而不是使用长度 非常感谢如果您了解正则表达式,这可能会简单一些: case -- at least two words when instr(c, ' ', 1, 1) > 0 then

我需要编写一点SQL来解析任何给定字符串的第二个字,或者如果没有空格,则解析整个字符串

逻辑是

“XXX-yyy-ZZZZZ”将返回yyy

“XXX YYY”将返回YYY和

“XXXXXX”将返回XXXXXX

有什么建议吗?有没有办法使用SUBSTR和字符串中的2个位置?而不是使用长度


非常感谢

如果您了解正则表达式,这可能会简单一些:

case
    -- at least two words 
    when instr(c, ' ', 1, 1) > 0 then
        case
            -- at least three words 
            when instr(c, ' ', 1, 2) > 0 then
                -- return text between first and last space
                substr(
                    c
                ,   instr(c, ' ', 1, 1)+1                          
                ,   instr(c, ' ', 1, 2) - instr(c, ' ', 1, 1) - 1 
                )
            else
            -- return 2nd word (text after first space)
                substr(c, instr(c, ' ', 1, 1)+1)
        end
    -- one word, return it
    else c
end
SELECT CASE WHEN REGEXP_COUNT('STRING', ' ') > 0 THEN
    REGEXP_SUBSTR ('STRING', '(\s)(\S*)',1,1)
ELSE
    'STRING'
END

FROM DUAL

使用“instr(c),,1,2)-instr(c),,1,1)-1”逻辑。再次谢谢你,这肯定是件麻烦事。在MySQL中,我可能会使用
SUBSTRING\u INDEX()
函数,这将大大减少混乱。这可能会很麻烦,但在Oracle中,您将逻辑放在自己的实用程序包中,并且可以随时使用。我同意,这是一种可能性。然而,确切的实施是值得考虑的。就我个人而言,我不太喜欢在实用程序包上创建依赖项,至少在您需要它们的模式中不包含这些依赖项的时候。即便如此,字符串操作也必须如此笨拙,这是一个遗憾。这不仅仅是PL/SQL,其他SQL方言中也存在同样笨重的字符串操作函数。