oracle sql子查询导致不需要的大括号,结果

piok6c0g  于 2023-11-17  发布在  Oracle
关注(0)|答案(2)|浏览(123)

我有一个大的查询,我使用一个下面的子查询,但这是返回不需要的括号.

SUBSTR(work__note.note_text,1,10000) || '  ' ||  (select user_name from cm_use where SEQ_USER_ID in work_request_note.create_user_id) || '   ' || work__note.create_date   "Notes"

字符串
这给出以下输出:
“工作分配给Kristie Cut(ard 1)2013年11月1日”
预期输出:“工作分配给Kristie Cutt klcd 1 01-NOV-23”
SUBSTR(work_note. note_text,1,10000)||“的一声||(从cm_use中选择user_name,其中SEQ_USER_ID在work__note.create_user_id中)||“的一声||work_note.create_date“Notes”

this is giving below output :

"Work Request was assigned to Kri Cut (kld1)   01-NOV-23"

desired output : "Work  was assigned to Kris Cup kld1   01-NOV-23"

yshpjwxd

yshpjwxd1#

你可以使用Replace函数来去掉大括号。如果你的结果像问题中一样,你可以在结果字符串上这样做:

Select    Replace(  Replace('Work Request was assigned to Kristie Cupitt (klccard1)   01-NOV-23', 
                            '(', ''
                           ), 
                  ')', ''
                 ) "TXT"
From Dual 

--  TXT                                                             
--  ----------------------------------------------------------------
--  Work Request was assigned to Kristie Cupitt klccard1   01-NOV-23

字符串
.或者(更好)在包含大括号的列上。在这个例子中,我会说它是来自表CMS_USER的USER_NAME。如果是这样,那么你的子查询,像下面这样修改,应该给予你预期的结果。

(select Replace(Replace(user_name, '(', ''), ')', '') "USER_NAME" from cms_user where SEQ_USER_ID in work_request_note.create_user_id)


顺便说一句:您的订阅者(work_request_note.note_text,1,10000)部分没有意义,因为SubStr是字符函数,该类型的列的最大长度为4000,因此如果您想要整个文本,则根本不需要SubStr。您可以将work_request_note.note_另一方面,如果你省略了最后一个参数,那么你将得到结果,直到字符串的结尾,无论它的长度是什么。

tf7tbtn2

tf7tbtn22#

你说结果包含“不需要的”大括号。我假设这些大括号包含在cms_user.user_name列中。
这是否意味着也有“想要的”牙套?如果是这样,它们是什么?你怎么知道哪些是想要的,哪些不是?
你可以替换它们,或者--也许更简单一点--使用translate函数(参见fiddle的演示)。还有,为什么不连接涉及的表,而是使用子查询来获取用户名?
因此,

select w.note_text                        ||' '|| 
       translate(c.user_name, 'x()', 'x') ||' '|| 
       w.create_date as notes
from work_request_note w join cms_user c on c.seq_user_id = w.create_user_id

字符串

相关问题