0

以前のエラー...人が日付形式を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() 
4

3 に答える 3

2

日付と時刻のリテラルで述べられているように:

MySQLDATEは次の形式の値を認識します。

  • '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'ます。

  • 数値が日付として意味をなす場合は、いずれYYYYMMDDYYMMDDの形式の数値として。たとえば、19830905830905はとして解釈され'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でそれを参照してください。

于 2012-12-18T10:31:00.213 に答える
1

あなたはこれを試すことができます-

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()
于 2012-12-18T10:33:17.033 に答える
0
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() ;

これがあなたの問題を解決することを願ってこの希望を試してください

于 2012-12-18T10:34:59.187 に答える