Как мне найти значение в целочисленной таблице, используя LIKE и <cfqueryparam>? - PullRequest
3 голосов
/ 22 сентября 2011

У меня есть запрос, подобный следующему:

ВЫБРАТЬ itemID ИЗ ItemTable, ГДЕ ItemID LIKE '% 123%'

itemTable имеет тип INT.Этот запрос сам по себе прекрасно работает, так как он выбирает «12345» и «0912398» и т. Д. ...

Проблема возникает, когда я пытаюсь использовать

Допустим, var searchValue =123

Если я попытаюсь: <cfqueryparam cfsqltype='cf_sql_integer' value="'%#searchValue#%'" >Я получаю * Недопустимые данные «123» для CFSQLTYPE CF_SQL_INTEGER. *

Если я попытаюсь: <cfqueryparam cfsqltype='cf_sql_varchar' value="'%#searchValue#%'" >Я получаю java.lang.Integer не может быть приведен к java.lang.String

Я пытался использовать CAST в моем SQL, а также использовать toString (searchValue) в разных местах, ноЯ всегда получаю одно из сообщений об ошибках выше.Есть ли способ поиска и целочисленной таблицы с использованием CFQUERYPARAM?

РЕДАКТИРОВАТЬ: Ниже фактический код, который я пытаюсь использовать ...

Код CFSCRIPT:

var searchValue=123;
searchFilterQuery(qry=qItemResults, field="itemID", value=searchValue,cfsqltype="cf_sql_varchar");

Функция ХФУ:

<!--- FILTER A QUERY WITH SEARCH TERM --->
<cffunction name="searchFilterQuery" access="public" returntype="query" hint="Filters a query by the given value" output="false">
    <!--- ************************************************************* --->
    <cfargument name="qry"          type="query"    required="true" hint="Query to filter">
    <cfargument name="field"        type="string"   required="true" hint="Field to filter on">
    <cfargument name="value"        type="string"   required="true" hint="Value to filter on">
    <cfargument name="cfsqltype"    type="string"   required="false" default="cf_sql_varchar" hint="The cf sql type of the value.">
    <!--- ************************************************************* --->
    <cfset var qryNew = QueryNew("")>
    <cfquery name="qryNew" dbtype="query">
        SELECT *
            FROM arguments.qry
            WHERE #trim(arguments.field)# LIKE <cfqueryparam cfsqltype="#trim(arguments.cfsqltype)#" value="#trim(arguments.value)#">
    </cfquery>
    <cfreturn qryNew>
</cffunction>

Ответы [ 2 ]

3 голосов
/ 22 сентября 2011

Вы должны сделать это, я считаю:

  • удалите кавычки, как говорили люди

  • используйте параметр VARCHAR, а не INTEGER, поскольку символы% делают передаваемое вами значение не INTEGER

  • CAST целочисленный столбец как VARCHAR на стороне БД. Возможно, БД может сделать это автоматически для вас, но я считаю, что лучше об этом говорить прямо.

    ВЫБРАТЬ itemID FROM itemTable ГДЕ CAST (itemId AS VARCHAR) КАК

0 голосов
/ 22 сентября 2011

Если вы удалите свои апострофы с помощью varchar, это сработает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...