2017-12-12 27 views
1

私はMySQLで書き直そうとしているOracle SQL Queryを持っています。MySQLで月曜日の日付を取得するには?

PS:日付はここでは任意です。実際のシナリオでは、ユーザー定義の日付を受け入れるTableau内でこのカスタムクエリを使用します。「参照開始日」は「開始日」と比較されます。 OracleのSQLクエリの

パート:上記

CASE WHEN psr.dt_orgn IS NULL THEN NULL 
ELSE 
CASE WHEN CAST('2017-05-22' AS DATE) >= CAST('2017-06-22' AS DATE) THEN TRUNC(psr.dt_orgn,'IW') 
ELSE TRUNC(psr.dt_orgn + ((CAST('2017-06-22' AS DATE)-CAST('2017-05-22' AS DATE))*(INTERVAL '1' DAY)),'IW') 
END 
END) week 

はその週

MySQLバージョンのつまり月曜日の日ウィークスタート日付 '内に日付を変換するために、データベース内の既存のカレンダーテーブルを使用しています。私は解決策を使用しています

CASE WHEN psr.originated IS NULL THEN NULL 
ELSE 
    CASE WHEN CAST('2017-05-22' AS DATE) >= CAST('2017-06-22' AS DATE) THEN DATE_ADD(psr.originated, 
INTERVAL - WEEKDAY(psr.originated) DAY) 
ELSE DATE_ADD(psr.originated + ((CAST('2017-06-22'AS DATE) - CAST('2017-05-22' AS DATE)) * (INTERVAL '1' DAY)) 
END 
END) week 

次のように私は、MySQLで「週開始日」を取得することが分かっ:

DATE_ADD(mydate, INTERVAL(1-DAYOFWEEK(mydate)) DAY) 

これを実行中にエラーが発生します。 私の質問は、MySQLクエリで '1日間隔'を使って2番目のelse条件に同じ方法を適用する方法です。

MySQLの週開始日を取得する簡単な方法はありますか?

答えて

2

あなたは任意のDATE値を取得し、最新の月曜日のDATE値を返す方法を尋ねていますね。オラクルでは、TRUNC(datestamp, 'W')を使用してこれを行うことができます。

は、ここでのMySQLでそれを行うための一つの方法です:

FROM_DAYS(TO_DAYS(datestamp) -MOD(TO_DAYS(datestamp) -2, 7)) 

日曜日を望んでいた場合、あなたは私がここにそれを書いた

FROM_DAYS(TO_DAYS(datestamp) -MOD(TO_DAYS(datestamp) -1, 7)) 

を使用します。 http://www.plumislandmedia.net/mysql/sql-reporting-time-intervals/

+0

ありがとう!これは私が探していたもののライン上にあり、あなたの投稿を読むでしょう。 – Anusha

+0

しかし、MySQLで同じ機能を果たしている関数を使用してはいけませんか? – Anusha

+1

必要に応じて関数を使用します。あなたは私が提供し、生産現場で証明されているより簡単なソリューションを求めました。 –

1

という名前の関数を使用して日付を取得することができます。たとえば、dayname()などです。たとえば、dayname( "2006-04-24")は月曜日に返されます。この場合、日付を含む行を関数に入れるだけです。その後、2つの日付を簡単に比較できます。

+0

この操作は、表内のすべての行で発生する必要があります。また、昼間は必要ありませんが、実際の月曜日の日付はこの場合 – Anusha

+0

@Anushaです。この回答はあなたに非常に役立つ情報を与えてくれました。クエリーでこの関数を使用して、月曜日の結果のみをフィルタリング(選択)することができます。 – Grantly

+1

@Grantlyそれは私が昼間の名前を使用することを指している方法です –

関連する問題