小编baw*_*pie的帖子

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

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

   X WITHDRAWN

   Explanation.
Run Code Online (Sandbox Code Playgroud)

我想返回顶线,即X WITHDRAWN.我不确定我是否可以指定只查看第一行,或者只是在回车之前返回所有文本 - 要么可以工作.

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

   regexp_substr(TABLE.TEXT,'^.*$')
Run Code Online (Sandbox Code Playgroud)

但它不起作用,所以任何帮助将不胜感激!

编辑:使用的解决方案:

   select regexp_substr(TABLE.TEXT, '[^,]+['||CHR(10)||']') from tab
Run Code Online (Sandbox Code Playgroud)

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

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

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

select
initcap(replace(regexp_substr(TABLE.TEXT, '.*$', 1, 1, 'm'),CHR(13),''))
from tab
Run Code Online (Sandbox Code Playgroud)

regex sql string oracle carriage-return

5
推荐指数
1
解决办法
1万
查看次数

在另一个表中返回最近的日期

我有两个表,一个叫做Events,一个叫做Documents.每个表都有两个日期列,即开始和结束(因此,事件开始,事件结束,文档开始,文档结束).两个表都由名为Customer_ID的字段链接.我有兴趣根据客户ID将最接近的相关事件开始(及其ID)日期返回到Doc开始日期,因此例如表中的数据可能如下所示:

Customer_ID DOC_ID      DOC_Start   DOC_END
A           12          22/01/2011  23/01/2011
A           13          01/12/2011  05/12/2011
C           22          13/03/2011  20/03/2011


Customer_ID Event_ID    Event_Start Event_END
A           J1          01/01/2011  23/01/2011
A           J2          04/12/2011  05/12/2011
C           J44         15/03/2011  20/03/2011
Run Code Online (Sandbox Code Playgroud)

我想要最终结果显示:

Customer_ID DOC_ID  DOC_Start   DOC_END     Event_ID
A           12      22/01/2011  23/01/2011  J1
A           13      01/12/2011  05/12/2011  J2
C           22      13/03/2011  20/03/2011  J44
Run Code Online (Sandbox Code Playgroud)

我已经尝试使用谷歌搜索解决方案,并尝试了一两个建议,但我找不到的任何示例似乎都是用于比较表中的日期,甚至是Oracle.此外,我在SQL方面的知识相当有限,但我所接受的大多数都来自这里,所以非常感谢我已经收到的帮助.

编辑:另一个条件是我只想返回相关的事件/ doc类型.所以我只想带回DOC_ID,其中DOC_TYPE是'Inquiry'或'Info',而Event_Type也是如此.

编辑:谢谢文森特,我按照建议把它放在哪里(想想我到处都试过了,但那里!)我现在得到了所需的结果.

如果有兴趣的话,我会发布工作解决方案以供将来参考:

SELECT
*

FROM (SELECT 
O_ASSESSMENTS.ASM_SUBJECT_ID as "ID", 
O_ASSESSMENTS.ASM_ID as "Assessment ID", 
O_ASSESSMENTS.ASM_START_DATE as "Assessment Start",  
O_ASSESSMENTS.ASM_END_DATE as "Assessment End", 
O_SERVICE_EVENTS.SEV_ID as …
Run Code Online (Sandbox Code Playgroud)

sql oracle date

2
推荐指数
1
解决办法
7796
查看次数

Oracle SQL - 是否有更有效的方法来组织大规模的case语句

目前我有一份报告,查看不同类型的文件.每个文档都有一个指定的时间表,它应该完成(即2天,4天等).有超过100种类型的文件.目前,每个文档的分配时间刻度保存在Excel电子表格中,并使用vlookup公式(基于评估ID)与excel中的数据匹配.遗憾的是,我们的数据库中没有地方可以放置这个指定的时间刻度,但我希望能够从数据库运行报告并将其发送给用户,而无需在Excel中执行此额外操作.我知道我可以通过写一个大规模的案例陈述来实现这一目标(下面只是一个例子)

SELECT
ID,
CASE WHEN ID = 1 then '1 day' 
WHEN ID = 2 then '42 days'
WHEN ID = 3 then '16 days'
ELSE 'CHECK' end as 'Timescale'
FROM TABLE1
Run Code Online (Sandbox Code Playgroud)

但我确实想知道在SQL中是否有更有效的方法(除了请求数据库中的其他字段来记录这个!)?可能没有,但认为值得问!谢谢.

sql oracle case space-efficiency

0
推荐指数
1
解决办法
238
查看次数

标签 统计

oracle ×3

sql ×3

carriage-return ×1

case ×1

date ×1

regex ×1

space-efficiency ×1

string ×1