2

現在、特定の日付の間のデータをエクスポートするために SQL クエリを実行しようとしていますが、日付の選択ではなくクエリを正常に実行し、何が問題なのかわかりません。

SELECT 
    title AS Order_No, 
    FROM_UNIXTIME(entry_date, '%d-%m-%Y') AS Date, 
    status AS Status,
    field_id_59 AS Transaction_ID,  
    field_id_32 AS Customer_Name, 
    field_id_26 AS Sub_Total, 
    field_id_28 AS VAT, 
    field_id_31 AS Discount, 
    field_id_27 AS Shipping_Cost, 
    (field_id_26+field_id_28+field_id_27-field_id_31) AS Total 
FROM 
    exp_channel_data AS d NATURAL JOIN
    exp_channel_titles AS t
WHERE 
    t.channel_id = 5 AND FROM_UNIXTIME(entry_date, '%d-%m-%Y') BETWEEN '01-05-2012' AND '31-05-2012' AND status = 'Shipped'  
ORDER BY 
    entry_date DESC
4

2 に答える 2

6

マニュアルで説明されているように、日付リテラルはYYYY-MM-DD形式にする必要があります。また、@ypercube がanswerで述べた点を念頭に置いて、次のことが必要です。

WHERE t.channel_id = 5
  AND entry_date >= UNIX_TIMESTAMP('2012-05-01')
  AND entry_date <  UNIX_TIMESTAMP('2012-06-01')
  AND status = 'Shipped'
于 2012-05-18T12:22:45.197 に答える
3

日付形式の他に、別の問題があります。で任意のインデックスを効果的に使用するには、 、または句entry_dateで条件を使用するときにその列に関数を適用しないでください(デフォルトの形式とは異なる形式で表示する必要がある場合は、リストの形式を使用できます)。クエリのその部分を記述する効果的な方法は次のとおりです。WHEREGROUP BYHAVINGSELECT

 (  entry_date >= '2012-05-01'  
AND entry_date < '2012-06-01' 
 )

DATEDATETIMEおよびTIMESTAMP列で動作します。

于 2012-05-18T12:29:59.940 に答える