2

timestampMySQL テーブルにフィールドがあります。次の SQL クエリを使用してテーブルをクエリしようとしています。

SELECT  login_mode,count(login_mode) as total 
FROM    login_activity,ccac_registered_users 
WHERE   login_activity.student_id=ccac_registered_users.student_id 
AND     login_date >= STR_TO_DATE('01/16/2013','%m/%d/%Y') 
AND     login_date <= STR_TO_DATE('01/17/2013','%m/%d/%Y') 
GROUP BY login_mode

クエリを Mysql で直接実行すると問題なく動作しますが、coldfusion アプリからは動作しません。私は困惑しています!日付を生成するコードは次のとおりです。

login_date >= STR_TO_DATE(
                 '#DateFormat(CreateODBCDate(startDate),'mm/dd/yyyy')#'
                 , '%m/%d/%Y'
              )

ColdFusion からのエラーは次のとおりです。

SQL 構文にエラーがあります。near '01/16/2013'',''%m/%d/%Y'') AND login_date <= STR_TO_DATE(''01/17) を使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してください。 /2013'',''%m/%d/' 1 行目

ここで何が問題なのですか?

編集

CFが実行しようとしているSQLをダンプしました。

SELECT login_mode,count(login_mode) as total 
FROM   login_activity,ccac_registered_users 
WHERE  login_activity.student_id=ccac_registered_users.student_id 
AND    login_date >= STR_TO_DATE(''01/16/2013'',''%m/%d/%Y'') 
AND    login_date <= STR_TO_DATE(''01/17/2013'',''%m/%d/%Y'') 

日付の周りに追加の引用符があり、それらが問題を引き起こしています。コードから追加した余分なものを削除すると、何も追加されません。

4

5 に答える 5

7

(私の以前のコメントから...)

dateFormatorを使用する必要はまったくないはずstr_to_dateです。プレゼンテーション用に設計されており、文字列DateFormatを返します。使用する必要があるのは、日付オブジェクトです。すでにあなたにそれを与えます。したがって、クエリで直接使用してください。(明らかに、常に最初に入力を検証する必要があります)CreateODBCDate

 WHERE column >= #CreateODBCDate(startDate)#  
 ....

.. またはさらに良いことに、cfqueryparam を使用します。

 WHERE column >= <cfqueryparam cfsqltype="cf_sql_date" value="#startDate#">
于 2013-01-23T19:59:12.437 に答える
4

文字列の代わりにクエリ パラメータと日付オブジェクトを使用します。このような:

AND login_date >= <cfqueryparam cfsqltype="cf_sql_date" value="#CreateDate(2013,1,16)#"> 
AND login_date <= <cfqueryparam cfsqltype="cf_sql_date" value="#CreateDate(2013,1,17)#">
于 2013-01-23T19:56:27.657 に答える
1

文字列内の日付を比較する代わりに、DateDIffを使用して日付の比較を実行することをお勧めします。これは、4つのアプリで非常にうまく機能します。

詳細はこちら:http ://www.w3schools.com/sql/func_datediff_mysql.asp

于 2013-01-23T19:42:23.713 に答える
1

SQLの使用:

    CONVERT(DateTime, DateField, 104)

または試してみてください:

    CAST( right(@date,4) + left(@date,4) as datetime )

私はColdFusionに相当するものは次のとおりだと思いました。

    <cfset date = DateFormat(date, "mm/dd/yyyy")>

- いいえ?

于 2013-01-23T19:43:41.643 に答える
1

CFQUERY は、一重引用符を自動的にエスケープします。preserveSingleQuotes()記述したとおりに動作させるには、CF が余分な一重引用符を追加しないようにラップする必要があります。または、日付比較に関する他の提案のいずれかを使用して書き直してください。

于 2013-01-23T20:09:15.023 に答える