3

異なる形式の日付を含む文字列列 ( 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

4

2 に答える 2

5

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つのフォーマットを入れてください。狂ったようにテストします。

幸運を。

(ああ、悪いスキーマをクリーンアップしようとしてくれておめでとう!)

于 2012-10-04T20:03:33.827 に答える
0

サーバーサイド言語、おそらく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を使用してみることもできます。

于 2012-10-04T19:51:09.303 に答える