使用 '?' SQL LIKE语句中的参数

时间:2013-06-04 16:43:30

标签: sql excel parameters firebird sql-like

初学者问题......

我通过Excel中的Microsoft Query访问Firebird数据库。

我在Excel中有一个包含4位数字的参数字段。我的一个DB表有一个包含9位相位代码的列(TP.PHASE_CODE),我需要返回以指定为参数的4位数代码开头的9位数代码中的任何一个。

例如,如果我的参数字段包含'8000',我需要查找并返回LIKE'8000%'的其他表/列中的任何阶段代码

我想知道如何在SQL中实现这一点,因为它看起来不像'?'表示参数可以包含在LIKE语句中。 (如果我用4位数字写,查询工作正常,但它不会让我在那里使用参数。)

有问题的陈述是这样的: TP.PHASE_CODE喜欢'?%'

这是我的完整代码:

SELECT C.COSTS_ID, C.AREA_ID, S.SUB_NUMBER, S.SUB_NAME, TP.PHASE_CODE, TP.PHASE_DESC,       TI.ITEM_NUMBER, TI.ITEM_DESC,TI.ORDER_UNIT,
C.UNIT_COST, TI.TLPE_ITEMS_ID FROM TLPE_ITEMS TI
INNER JOIN TLPE_PHASES TP ON TI.TLPE_PHASES_ID = TP.TLPE_PHASES_ID
LEFT OUTER JOIN COSTS C ON C.TLPE_ITEMS_ID = TI.TLPE_ITEMS_ID
LEFT OUTER JOIN AREA A ON C.AREA_ID = A.AREA_ID
LEFT OUTER JOIN SUPPLIER S ON C.SUB_NUMBER = S.SUB_NUMBER

WHERE (C.AREA_ID = 1 OR C.AREA_ID = ?) and S.SUB_NUMBER = ? and TI.ITEM_NUMBER = ? and **TP.PHASE_CODE like '?%'**

ORDER BY TP.PHASE_CODE

有关完成此查询的其他方法的任何想法?

非常感谢!

3 个答案:

答案 0 :(得分:5)

如果您使用`LIKE'?%',则问号是文字文字,而不是参数占位符。

您可以使用LIKE ? || '%',或者如果您的参数本身从不包含LIKE模式:STARTING WITH ?,如果您要查询的字段已被编入索引,则效率可能更高。

答案 1 :(得分:4)

你可以做到

and TP.PHASE_CODE like ?

但是当您将参数8000传递给SQL时,您必须在其后面添加%,因此在这种情况下,您可以将"8000%"传递给SQL。

答案 2 :(得分:0)

尝试字符串函数:Left

  

WHERE(C.AREA_ID = 1或左(C.AREA_ID,4)=“8000”)