0

新年まで問題がなかったので、YEARWEEKの問題だと思っていましたが、そうではないことを確認したと思います。

機能しなくなった元のステートメント (0 の結果を返す):

SELECT t1.*, t2.family 
FROM report_tables.roc_test_results as t1 
LEFT JOIN report_tables.roc_capacity_standards as t2 
ON t1.item=t2.part_number 
WHERE YEARWEEK(t1.date_created)='201301' 
    AND t1.operation='TEST' 
    AND t1.result='Passed'

しかし、奇妙な点は、これが完全に正常に機能することです (22 の結果が返されます)。

    SELECT t1.*, t2.*
FROM report_tables.roc_test_results as t1 
LEFT JOIN report_tables.roc_capacity_standards as t2 
ON t1.item=t2.part_number 
WHERE YEARWEEK(t1.date_created)='201301' 
    AND t1.operation='TEST' 
    AND t1.result='Passed'

これが機能しなくなった理由を誰かが知っていますか? 唯一の違いは、2 番目のクエリに t2 のすべての列を含めることです。

4

1 に答える 1

1

Yearweek(date) を使用する代わりに、ISO 標準に従って年と週を返す Yearweek(date,3) を使用する必要があります。

これを試してみると:

SELECT yearweek('2013-01-01'), yearweek('2013-01-05')
201253; 201253

この間隔は 2012 年の第 53 週の一部と見なされ、1 月 6 日は 2013 年の第 1 週と見なされますが、ISO 標準によれば、これらは 2013 年の第 1 週の一部であることがわかります。

SELECT yearweek('2013-01-01',3), yearweek('2013-01-06',3)
201301; 201301

これが問題かもしれないと思います。同様の問題に対するこの回答も参照してください。

于 2013-01-09T13:35:43.860 に答える