案例陈述不执行第二案件

时间:2016-04-28 22:38:20

标签: sql oracle

我需要您的帮助以下查询。你能帮忙吗?

以下是Oracle数据库中的示例记录:

ID:

SqlCommand cmd35 = new SqlCommand("INSERT INTO BTmr (Barcode,[Machine Name],[Machine ID]) SELECT Barcode,[Machine Name],[Machine ID] FROM BkmP WHERE barcode like '" + c13 + "%' UNION INSERT INTO BTmr([Repair Cost],[Repair Date],Barcode)values (@cst,@rprd)", connection);

            cmd35.Parameters.AddWithValue("@cst", textBox10.Text);
            cmd35.Parameters.AddWithValue("@rprd", dateTimePicker1.Text);

我的意图是,如果L7985W6W7W5HJYR5 LJHGTIKFF89EE7HJJU7 LIUH789KEHD7W9JHF LYUEJDJ8F2NIBRANCH LOI9DDH7E38BRANCH L8908HYS6WIBRANCH PJHS79209KJSJYIEJHSV12 b.branch_id开头,那么它会删除前导零和删除字符,但如果Lb.branch_id结尾,那么我希望它与之合并另一个领域,但没有工作。第一部分是工作,如果它以‘%BRANCH%'开头,那么它可以工作但不知何故从不执行L部分。

‘%BRANCH%'

1 个答案:

答案 0 :(得分:0)

From the documentation

  

在一个简单的CASE表达式中,Oracle数据库搜索 expr 等于 comparison_expr 的第一个WHEN ... THEN对并返回 return_expr
  ...
  对于简单的CASE表达式,数据库仅在将其与 expr 进行比较之前评估每个 comparison_expr 值,而不是在比较任何 exp_ 之前评估所有 comparison_expr 值。他们使用 expr

您需要安排案例陈述,以便首先匹配最严格的规则,否则永远不会达到:

CASE
  WHEN b.branch_id like ‘L%BRANCH%'
    THEN substr(b.branch_loc,2,9) || substr(i.branch_name,1,9)
  WHEN b.branch_id like L%'
    THEN TRIM(substr((TO_CHAR(TRIM(LEADING '0' FROM b.branch_id))),-10))
END AS BRANCH_INFO

你也可以说

  WHEN b.branch_id LIKE 'L%' AND b.branch_id LIKE '%BRANCH%' THEN

但是将它组合成单个LIKE模式更简单。

您的查询还有一个where子句,使案例表达式中的L%变得多余,但我不确定这是否是临时的。如果是,那么您可能希望ELSE处理所有不以L开头的值,除非您希望它们(隐式地)为空。

正如劳雷尔指出的那样,如果你希望价值结束于' BRANCH'然后你不想要最后的通配符%符号,因为如果在BRANCH之后有更多的字符,它也会匹配。您的样本数据中没有。