2016-12-18 15 views
0

2015年は53週間です。あなたの今週の週が月曜日から始まるときは、1週目、2週目、3週目が週53日です。4月2016週は1週目です。MySQL DATE_FORMATが最初の週に正しくない

MySQLでは、これを以下に出力します。しかし避ける方法は?

SELECT DATE_FORMAT('2015-12-31', 'week %u') //week 53 
SELECT DATE_FORMAT('2016-01-01', 'week %u') //week 00 
SELECT DATE_FORMAT('2016-01-02', 'week %u') //week 00 
SELECT DATE_FORMAT('2016-01-03', 'week %u') //week 00 
SELECT DATE_FORMAT('2016-01-04', 'week %u') //week 01 

私はPHP 7.0.9および10.1.16-MariaDB

+0

あなたは*何を出力したいです*一つの方法は、長さcase文のでしょうか?もちろん、 –

+0

ugh。 :-)私は1月2日、3月1日に53週目を予定していた。週00は存在しません。 – Houdini

+0

週カウントのデフォルトの日曜日。 SELECT WEEK( '2016-01-03')を実行して1週間後に – matinict

答えて

0

まあ、0週はのための規則に従って、存在しません。週を割り当てる。

SELECT (CASE WHEN DATE_FORMAT('2016-01-01', 'week %u') = 'week 00' then 'week 53' 
      ELSE DATE_FORMAT('2016-01-01', 'week %u') 
     END) 
. . . 

あるいは、このようなネストされた関数:

SELECT COALESCE(NULLIF(DATE_FORMAT('2016-01-01', 'week %u'), 'week 00'), 'week 53') 
0

を使用するには、このようなものでそれを試してみてください。

SELECT DATE_FORMAT('2015-12-31', 'week %u') bad, WEEK('2015-12-31', 3) good UNION ALL 
SELECT DATE_FORMAT('2016-01-01', 'week %u') bad, WEEK('2016-01-01', 3) good UNION ALL 
SELECT DATE_FORMAT('2016-01-02', 'week %u') bad, WEEK('2016-01-02', 3) good UNION ALL 
SELECT DATE_FORMAT('2016-01-03', 'week %u') bad, WEEK('2016-01-03', 3) good UNION ALL 
SELECT DATE_FORMAT('2016-01-04', 'week %u') bad, WEEK('2016-01-04', 3) ; 
関連する問題