当前位置: 首页 > 面试题库 >

Oracle SQL:使用regexp_substr返回字符串的第一行

程俊誉
2023-03-14
问题内容

我正在尝试从SQL查询(oracle 11)的文本框中返回文本的第一行。文本框的内容如下所示:

   X WITHDRAWN

   Explanation.

我想返回第一行,即X WITHDRAWN。我不确定是否可以指定仅查看第一行,还是只返回回车之前的所有文本-两种方法都可以。

我想我需要使用regexp_substr,但是我不太确定语法。我试过了:

   regexp_substr(TABLE.TEXT,'^.*$')

但它不起作用,因此不胜感激!

编辑:使用的解决方案:

   select regexp_substr(TABLE.TEXT, '[^,]+['||CHR(10)||']') from tab

编辑:我注意到我得到答案中返回的换行符和回车符的混合,所以我使用以下解决方案只返回文本,没有其他字符。

    select 
     replace(replace(regexp_substr(TABLE.TEXT, '[^,]+['||CHR(10)||']'),CHR(10),''),CHR(13),'') 
     from tab

编辑:按照@Ben的回答,我将我的解决方案修改为以下内容:

select
initcap(replace(regexp_substr(TABLE.TEXT, '.*$', 1, 1, 'm'),CHR(13),''))
from tab

问题答案:

Parado的正则表达式会多次匹配不是逗号的所有内容,然后再返回回车符。这意味着它不能用于换行或文本中有逗号。

Oracle使用m
match参数支持多行表达式。使用此模式时,$匹配每行的结尾和字符串的结尾。您可以使用它来简单地将表达式大规模地用于:

regexp_substr(str, '.*$', 1, 1, 'm')

这与匹配任何内容的字符串的第一个匹配项(第一行)相匹配,然后从第一个字符开始计算字符串的末尾。

举个例子:

with strings as ( 
 select 'hi
         hi again' as str
   from dual
  union all
 select 'bye
         and again'
   from dual
        )
 select regexp_substr(str, '.*$', 1, 1, 'm')
   from strings


 类似资料:
  • 问题内容: 我在Oracle数据库中有一个字符串,我的字符串是:’bbb; aaa; qqq; ccc’ 我用正则表达式来分割我的字符串: 我想按顺序拆分它,我总是希望下面的输出: 因为subString的顺序对我来说非常重要。但是此查询的结果不正确: 问题答案: 您不需要a即可获得结果;此外,要获得给定顺序的结果,您所需要做的只是一个子句:

  • 问题内容: 当我使用sqldeveloper在oracle 10g中运行这样的查询时,它运行良好。 给我名字和国家。当我在hibernate状态下将其作为命名查询运行时,对于“国家/地区”,我只会得到“ C”而不是“加拿大”。 为什么会这样呢? 问题答案:

  • 问题内容: 我正在尝试检索以SQlite中任何非字母字符开头的所有列,但似乎无法使其正常工作。我目前有此代码,但它返回每一行: 有没有办法检索TestNames的第一个字符不属于字母的所有行? 问题答案: 你只去第一个角色吗? substr函数(在某些SQL语言中也可以称为left())将帮助您隔离字符串中的第一个char。 编辑:也许在sqllite中的substr(TestNames,1,1)

  • 问题内容: 好的,这就是我的for子手游戏代码,我唯一要做的就是让我的程序将其中一个单词随机化,这应该在方法中成功完成。但是我唯一的问题是让String变量 “ word” 返回到主类(在主类中的所有 “ word” 变量下面都有错误)。 如果我可以通过这种方法获得另一种帮助,或者从列表中产生随机单词的另一种方法,那将是惊人的。 问题答案: 在Java中,参数是通过值而不是引用传递的。因此,您不能

  • GETRANGE key start end 返回key 中字符串值的子字符串,字符串的截取范围由start 和end 两个偏移量决定(包括start 和end 在内)。可以使用负值,字符串右面下标是从-1开始的。 注意返回值处理: 1: start>=length, 则返回空字符串 2: stop>=length,则截取至字符结尾 3: 如果start 所处位置在stop右边, 返回空字符串

  • 我想打这个电话并返回一个字符串,但我有这个错误: “java.lang.非法状态异常:块()/块第一()/块最后())正在阻塞,这在线程反应器中不受支持” 我不明白为什么我做错了?WebClient支持异步和同步调用。 这是一个只有3个依赖的springboot项目。 我怎么能像正常的同步调用一样只返回一个字符串? 谢谢。