2012-05-14 7 views
0
Concat(Date_format(Date_add(Date_format(Str_to_date(
               products_options_values, 
               '%m-%d-%Y' 
                ), 
                 '%Y-%m-%d'), 
              INTERVAL(2-Dayofweek(Date_format(
              Str_to_date(
              products_options_values, '%m-%d-%Y' 
              ) 
              , '%Y-%m-%d')))day), '%b%d'), '-', 
     Date_format(Date_add(Date_format(Str_to_date(products_options_values, 
             '%m-%d-%Y' 
     ) 
     , 
     '%Y-%m-%d' 
     ), 
     INTERVAL(8 - Dayofweek(Date_format(Str_to_date(products_options_values, 
     '%m-%d-%Y' 
     ), '%Y-%m-%d')))day), '%b%d')) 
     AS week_dates, 
     Week(Date_format(Str_to_date(products_options_values, '%m-%d-%Y'), 
      '%Y-%m-%d')) 
        AS weekdays 

上記のmysql日付計算ロジックをjqueryで実装する必要があります。 これは、日付を取得するためのmysql select文の一部です。しかし、私はこの日付の計算で何が起こっているのか理解できませんでした。誰かがこれを説明できますか?誰かが私にこのmysql selectクエリ値の論理を説明してもらえますか?

+3

最初にクエリの形式を正しく指定してください。 –

+0

どのように正確に行うのですか?さらに、私はあなたが他のフィールドと必要なものはどこにもないと思っています。この2つの計算を説明するのにORDER BYが必要です – Bluemagica

+0

私はあなたが 'concat(* New line here * date_format(* Newここには* DATE_ADD'というように –

答えて

1

このようなコードを理解するための鍵は、の中のの外側から作業することです。 products_options_values内の文字列を受け取り、それを解析することにより、MySQLのDATE値に変換し、

DATE_FORMAT(STR_TO_DATE(products_options_values, '%m-%d-%Y'), '%Y-%m-%d') 

これら二つの関数呼び出しの最も内側、STR_TO_DATE:あなたのコードを通じて一目で素早く最も内側の関数呼び出しが同じであることが明らかになりました2番目の議論で与えられた書式(すなわち、US-style 月 - 日)に従う。一番外側の関数呼び出しDATE_FORMATは、結果としてDATEの値をとり、第2引数(つまり、年月日)によって与えられる形式でフォーマットします。

つまり、それらの呼び出しは、米国式で表された日付をより国際的な形式に変換します。これらの呼び出しの代わりにinternational_dateを使用して、クエリの残りの部分を書き換え:

Concat(
    Date_format(
    Date_add(
     international_date, 
     INTERVAL(
     2 - Dayofweek(international_date) 
    ) day 
    ), 
    '%b%d' 
), 
    '-', 
    Date_format(
    Date_add(
     international_date, 
     INTERVAL(
     8 - Dayofweek(international_date) 
    ) day 
    ), 
    '%b%d' 
) 
) AS week_dates, 
Week(international_date) AS weekdays 

DAYOFWEEK機能は、(1が日曜日で、7は土曜日である)1〜7の整数として週の指定した日付の日を返します。したがって、2 - DAYOFWEEK(international_date)日を追加すると、同じ週の月曜日が与えられます。 8 - DAYOFWEEK(international_date)を追加すると、翌週の日曜日になります。それはまさに、DATE_ADDの機能が果たしていることです。

これらの日付(翌週の同じ曜日と日曜日の月曜日)は、特定の形(3文字の月と2桁の日、例えばJan14またはMay18)でフォーマットされ、分離ハイフンを使用してCONCATと連結されています。結果には別名week_datesが与えられます。

結果セットには、別名weekdaysがある別の列もあります。これは、international_dateに適用されたWEEK関数の値(つまりその年の週)を保持します。

関連する問題