2015-01-08 2 views
3

У меня есть поле базы данных, которая содержит VARCHAR значения, какСравнение двух символьных значений в ColdFusion cfquery

XY23(CX Web) 

И я пишу запрос о запросах как

SELECT qPdfs.filename, qPdfs.code, qObjects.id 
FROM qPdfs, qObjects 
WHERE qPdfs.code = qObjects.code 

ИЛИ как

SELECT qPdfs.filename, qPdfs.code, qObjects.id 
FROM qPdfs, qObjects 
WHERE <cfqueryparam value="#qObjects.code#" cfsqltype="CF_SQL_VARCHAR"> = <cfqueryparam value="#qPdfs.code#" cfsqltype="CF_SQL_VARCHAR"> 

Но я получаю сообщение об ошибке, например

XY23(CX Web) must be interpretable as a valid number in the current locale. 

Любая помощь?

Спасибо

+0

Итак, вы говорите, что у двух разных таблиц есть столбец с именем «code», который является типом CARCHAR? Что такое CARACHAR? Возможно, вы имеете в виду VARCHAR? Кроме того, вы пробовали присоединиться к двум запросам (фактически используя синтаксис JOIN)? –

+0

Да, это был фактически VARCHAR. – user3733648

ответ

0

ли оба столбцов базы данных типа varchar? Если это так, QoQ, вероятно, применяет некоторое неявное преобразование, основанное на содержимом столбцов. Если некоторые из кодов являются числовыми, QoQ может пытаться отбросить их на номера внутри, прежде чем выполнять сравнение. Отсюда и ошибка. cfqueryparam здесь не поможет, поскольку его можно использовать только для литералов, а не для столбцов запросов. Если прямое сравнение равенства т.е. ColName = ColName вызывает эту ошибку, попробуйте литье вместо:

WHERE CAST(qPdfs.code AS VARCHAR) = CAST(qObjects.code AS VARCHAR) 

NB: QoQ сравнение строк чувствительны к регистру, так что вы можете преобразовать столбцы в верхний/нижний регистр первыми.

Смежные вопросы