web-dev-qa-db-ja.com

日付から先行ゼロを削除する方法

私は次を使用したクエリがあります

date_add(DATE_FORMAT(ss.week_startdate,'%y-%m-%d'),INTERVAL (tt.day_id- 1 )DAY) as date

フィールドのデータ型はdatetimeであり、結果の日付は次のようになります

2015-04-06

しかし、望ましい結果はこのようなものです

2015-04-6

必要ありません0の前。私はこれを試しました

date_add(DATE_FORMAT(ss.week_startdate,'%y-%m-%e'),INTERVAL (tt.day_id- 1 )DAY) as date

しかし、うまくいきませんでした。誰でも助けてくれますか?

1
AVM

間違った順序で適用された関数があります。最初に日付演算(_date_add_など)を実行し、formatを最後に適用する必要があります。

_DATE_FORMAT( DATE_ADD(ss.week_startdate, INTERVAL (tt.day_id - 1) DAY),
             '%Y-%m-%e')
_

4桁の年には_%Y_ではなく_%y_も必要です。


また、多くの冗長な操作を行うため、最初のクエリも変更することをお勧めします。

_date_add(
    DATE_FORMAT(ss.week_startdate,'%y-%m-%d'),
                INTERVAL (tt.day_id- 1 )DAY
               )
as date
_
  • まず、以下を計算します:DATE_FORMAT(ss.week_startdate,'%y-%m-%d')
    これは、日時値を次の形式の文字列に変換します(現在の日付の例、2015年4月28日):_'15-04-28'_。
  • 次に、それを行います:date_add( previous_result, INTERVAL (tt.day_id-1) DAY)
    しかし、_previous_result_は文字列なので、dateまたはdatetimeに変換する必要があります。 2年形式が誤った日付につながらないのは偶然です。この変換後、date_add()が計算されます。(変換後の)最初の引数はdateであり、時間だけではなく日のみを追加するため、結果もdateになります。
  • 次に、_as day_が考慮されますが、前の操作でdateも生成されたため、これは何もしません。
  • 最後に、結果は日付のデフォルトの形式で表示されます。これは(偶然ですが)_%Y-%m-%d_であり、必要な形式を取得しています。

全部で3つの変換(_datetime -> char -> date -> char_)が必要なのは1つだけです。

5
ypercubeᵀᴹ