使用'';类SQL语句中的参数

使用'';类SQL语句中的参数,sql,excel,parameters,firebird,sql-like,Sql,Excel,Parameters,Firebird,Sql Like,我正在通过Excel中的Microsoft Query访问Firebird数据库 我在Excel中有一个包含4位数字的参数字段。我的一个DB表有一列(TP.PHASE\u code)包含一个9位数的相位码,我需要返回以指定为参数的4位数代码开头的任何9位数代码 例如,如果我的参数字段包含“8000”,我需要在另一个表/列中查找并返回类似“8000%”的任何阶段代码 我想知道如何在SQL中实现这一点,因为它看起来不像表示参数的“?”可以包含在like语句中。(如果我输入4位数字,查询工作正常,但它

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

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

例如,如果我的参数字段包含“8000”,我需要在另一个表/列中查找并返回类似“8000%”的任何阶段代码

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

有问题的语句如下:
TP.PHASE\u类似于“?%”的代码

这是我的全部代码:

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
关于实现此查询的其他方法有什么想法吗?

试试字符串函数:

式中(C.区域ID=1或左(C.区域ID,4)=“8000”)

你能行

and TP.PHASE_CODE like ?

但是,当您将参数
8000
传递给SQL时,必须在其后面添加
%
,因此在本例中,您将
“8000%”
传递给SQL。

如果使用“LIKE”?%,则问号是文本,而不是参数占位符


您可以使用
LIKE?| |“%”,或者如果您的参数本身从未包含类似的模式:
从?
开始,如果您要查询的字段被索引,这可能会更有效。

您好,马克,谢谢,Firebird似乎在字符串函数方面受到限制,但在您回答之前,我确实找到了一个“子字符串”完成此工作的函数如下:“substring(TP.PHASE_CODE from 1 for 4)=?(您的解决方案要简单得多!)再次感谢。@user2452582我不完全确定字符串函数与原始问题有何关系。你可以在Hi Mark中找到一个内部函数列表,因为我找不到你给我的(| |)解决方案,我正在寻找字符串函数来提取我需要将参数与之进行比较的前4位数字…感谢链接,我将查看它。我从未意识到(
|
是由SQL标准定义的),但快速浏览文档集可以看出,它列在嵌入式SQL指南表6.2中(请参见末尾)。鉴于该文档的名称,您可能不会首先查看它。