異なる形式の日付を含む文字列列 ( varchar(200) )を持つテーブルがあります。例えば
may 24 1983 12:00AM
1981-01-13 00:00:00
1979-01-13 00:00:00:123
この列を日付に変換して年を抽出したいと考えています。どうすればいいですか?STR_TO_DATE を使用しましたが、うまく機能しません。異なるフォーマットごとに SUBSTRING を使用する必要がありますか?
MySQL バージョン 5.0.95
異なる形式の日付を含む文字列列 ( varchar(200) )を持つテーブルがあります。例えば
may 24 1983 12:00AM
1981-01-13 00:00:00
1979-01-13 00:00:00:123
この列を日付に変換して年を抽出したいと考えています。どうすればいいですか?STR_TO_DATE を使用しましたが、うまく機能しません。異なるフォーマットごとに SUBSTRING を使用する必要がありますか?
MySQL バージョン 5.0.95
man ページに有効な日付を検出するためのトリックがあります。STR_TO_DATE
これを使用して、フォーマットが機能したかどうかを判断できます。
select foo,
case when length(date(str_to_date(foo,"%Y-%m-%d %H:%i:%S"))) is not null then str_to_date(foo,"%Y-%m-%d %H:%i:%S")
when length(date(str_to_date(foo,"%b %d %Y %h:%i%p"))) is not null then str_to_date(foo,"%b %d %Y %h:%i%p")
end as newdate
from my_table
あなたが期待しているすべての人に1つのフォーマットを入れてください。狂ったようにテストします。
幸運を。
(ああ、悪いスキーマをクリーンアップしようとしてくれておめでとう!)
サーバーサイド言語、おそらくPHPを使用してこれを実行しstrotime
、きれいな日付を生成するために使用します。
CASE
それ以外の場合、私が見る他の唯一のオプションは、可能な形式を読み取るためにsの書き込みを開始し、を使用して出力することDATE_FORMAT
です。おそらく次のようなものです:
擬似コード(1983年5月24日12:00 AMの場合)
CASE
WHEN col (after first space is some digit)
AND (after second space is 4 digits)
AND (after third space has 'AM' or 'PM')
THEN
DATE_FORMAT(col, '%....')
REGEXP
パターンマッチングにtoを使用してみることもできます。