0

実際よりも複雑に聞こえます。SELECT 部分でやろうとしていることは次のとおりです。

SELECT TIMESTAMPADD(
          UCASE(
                 SUBSTRING(offset_unit,1,CHAR_LENGTH(offset_unit)-1)
                ),1,'2003-01-02') as offset_date

offset_unitは、データベースの VARCHAR 列です。「時」、「分」のいずれかが含まれます。

オフセットは INT です。

最後の文字 ('s') を削除した後、offset_unit を大文字に変換しようとしています。これにより、適切な間隔 (MINUTE、HOUR...) を取得できるため、後で並べ替えに使用できる日付を取得できます。 、しかしMySQLはエラーをスローし続けます。一度に 1 つの関数を追加して各ステップをテストしましたが、TIMESTAMPADD を追加した後にのみ失敗します。MINUTE を手動で入力すると、機能します。

これを機能させる方法はありますか?

追加情報: 私はこれを CakePHP 1.3 で、「fields」配列内の検索で実行していますが、それは重要ではありません。

4

2 に答える 2

3

CASE WHENこれは、句を次のように使用することで簡単に実現できます。

SELECT (CASE 
            WHEN offset_unit = 'HOURS' 
                   THEN TIMESTAMPADD(HOUR,`offset`,'2003-01-02')
            WHEN offset_unit = 'MINUTES' 
                   THEN TIMESTAMPADD(MINUTE,`offset`,'2003-01-02')
        END) AS offset_date
FROM my_table;

ここでSQLFIDDLEデモを参照してください

于 2012-08-23T11:23:05.637 に答える
1

TIMESTAMPADDは最初の引数として文字列を使用せず、ユニットキーワードを使用するため、機能しませんMINUTE。私の推測では、これを 2 つのステップで行う必要があります。最初にユニットを取得してから、正しいキーワードを使用してクエリを作成します。

于 2012-08-23T11:22:53.087 に答える