![](/img/trans.png)
[英]How to use the Result Set from a Query in the Constraint Editor to conditionally execute SQL Task?
[英]How to use if statements to conditionally execute SQL query
我在数据库中有两个字段name_line1
和name_line2
。
在输入表单中,它是一个字段“名称”,但通过 substr 对其进行操作以获得两个VARCHAR(30)
并分配给上述两个字段。
我想将两个字段连接在一起。 但在数据库中,name_line1 没有尾随空格。 我无法使用此链接Add SPACE to CONCAT with SUBSTR Oracle SQL中的以下代码,因为在某些情况下指向 substr 的点位于单词的中间(在下面的 Stationaries 中的 n 处):
HERE
Experimental unit 1998 Station|aries Sdn Bhd.
name_line1 name_line2
如果 name_line1 不是 30 个字符并且 name_line2 有字符或任何其他更相关的条件,我如何编写代码来有条件地连接空格?
也许这就是你需要的:
WITH sample AS
(SELECT 1 "SAMPLE", 'Experimental unit 1998' "F1", 'Stationaries Sdn Bhd.' "F2" FROM Dual UNION ALL
SELECT 2 "SAMPLE", 'Experimental unit 1998 Stationaries ' "F1", ' Sdn Bhd.' "F2" FROM Dual UNION ALL
SELECT 3 "SAMPLE", 'Experimental unit 1998 Stationaries Sdn Bhd.' "F1", Null "F2" FROM Dual UNION ALL
SELECT 4 "SAMPLE", Null "F1", Null "F2" FROM Dual UNION ALL
SELECT 5 "SAMPLE", Null "F1", 'Experimental unit 1998 Stationaries Sdn Bhd.' "F2" FROM Dual)
SELECT
F1, F2,
CASE
WHEN F1 Is Null And F2 Is Not Null THEN F2
WHEN F1 Is Not Null And F2 Is Null THEN F1
WHEN Length(RTRIM(F1)) <= 30 And Length(LTRIM(F2)) > 0 THEN F1 || ' ' || LTRIM(F2)
WHEN Length(RTRIM(F1)) > 30 And Length(LTRIM(F2)) > 0 THEN F1 || ' ' || LTRIM(F2)
ELSE F1
END "THE_RESULT"
FROM
sample
--
-- R e s u l t
--
-- F1 F2 THE_RESULT
-- -------------------------------------------- -------------------------------------------------- -----------------------------------------------
-- Experimental unit 1998 Stationaries Sdn Bhd. Experimental unit 1998 Stationaries Sdn Bhd.
-- Experimental unit 1998 Stationaries Sdn Bhd. Experimental unit 1998 Stationaries Sdn Bhd.
-- Experimental unit 1998 Stationaries Sdn Bhd. NULL Experimental unit 1998 Stationaries Sdn Bhd.
-- NULL NULL NULL
-- NULL Experimental unit 1998 Stationaries Sdn Bhd. Experimental unit 1998 Stationaries Sdn Bhd.
如您所见,将 CASE 与多个条件一起使用并有意删除可能存在的空格(RTRIM / LTRIM)使您有机会将空间放置在您想要的位置。 结果也可能是或应该是TRIM的主题。
好吧,根据@JNevill 的评论,我使用了以下代码:
Select vendor_id,
CASE
WHEN LENGTH(name_line1) <30 AND name_line2 IS NOT NULL THEN name_line1||' '||name_line2
ELSE name_line1||name_line2
END AS FullName
from ap_vendors where vendor_id like '%YOULINE%';
@dr 的其他案例有助于考虑我是否错过了任何潜在的漏洞,但经过一番考虑,我决定由于 name_line2 中的任何前导空格都是故意的,因此最好保持原样。
代码应涵盖案例
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.