以前のエラー...人が日付形式を20121218として入力したデータベースがありますが、これをmysqlの日付として使用することは可能ですか?
SELECT substr(week_begin_date,0,4)+'-'+substr(week_begin_date,4,2)+'-'+substr(week_begin_date,6,8)
AS startdate
FROM table
WHERE startdate < now()
以前のエラー...人が日付形式を20121218として入力したデータベースがありますが、これをmysqlの日付として使用することは可能ですか?
SELECT substr(week_begin_date,0,4)+'-'+substr(week_begin_date,4,2)+'-'+substr(week_begin_date,6,8)
AS startdate
FROM table
WHERE startdate < now()
日付と時刻のリテラルで述べられているように:
MySQL
DATE
は次の形式の値を認識します。
'YYYY-MM-DD'
または'YY-MM-DD'
形式の文字列として。「リラックスした」構文が許可されます。日付部分の間の区切り文字として、任意の句読文字を使用できます。たとえば、、、、、'2012-12-31'
およびは'2012/12/31'
同等です。'2012^12^31'
'2012@12@31'
'YYYYMMDD'
文字列が日付として意味をなす場合は、どちらの'YYMMDD'
形式にも区切り文字のない文字列として。たとえば、'20070523'
と'070523'
はと解釈されます'2007-05-23'
が、'071332'
違法であり(無意味な月と日の部分があります)、になり'0000-00-00'
ます。数値が日付として意味をなす場合は、いずれ
YYYYMMDD
かYYMMDD
の形式の数値として。たとえば、19830905
と830905
はとして解釈され'1983-09-05'
ます。
したがって20121218
、実際には有効な日付リテラルです。したがって:
SELECT DATE(`week_begin_date`) AS `startdate`
FROM `table`
WHERE DATE(`week_begin_date`) < NOW()
sqlfiddleでそれを参照してください。
ただし、長期的には、スキーマ(および、明らかに、既存の形式の値を読み取ることを期待するアプリケーションコード)を修正することをお勧めします。
ALTER TABLE `table` MODIFY week_begin_date DATE
sqlfiddleでそれを参照してください。
あなたはこれを試すことができます-
SELECT * from Table where STR_TO_DATE(substr(week_begin_date,0,4),substr(week_begin_date,4,2),substr(week_begin_date,6,8)','%d,%m,%Y') > now()
select STR_TO_DATE(SUBSTR(week_begin_date,4,2)+"/"+SUBSTR(week_begin_date,6,8)+"/"+SUBSTR(week_begin_date,0,4),'%m/%d/%Y') AS startdate
FROM table where STR_TO_DATE(SUBSTR(week_begin_date,4,2)+"/"+SUBSTR(week_begin_date,6,8)+"/"+SUBSTR(week_begin_date,0,4),'%m/%d/%Y') < now() ;
これがあなたの問題を解決することを願ってこの希望を試してください