我需要您的帮助以下查询。你能帮忙吗?
以下是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
开头,那么它会删除前导零和删除字符,但如果L
以b.branch_id
结尾,那么我希望它与之合并另一个领域,但没有工作。第一部分是工作,如果它以‘%BRANCH%'
开头,那么它可以工作但不知何故从不执行L
部分。
‘%BRANCH%'
答案 0 :(得分:0)
在一个简单的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之后有更多的字符,它也会匹配。您的样本数据中没有。