2016-03-24 9 views
1

まず、他のプログラミング言語の使用は許可されていません。純粋なMYSQLでmdYの形式で日付を挿入

文字列の形式の日付がmdYであるとします。 :10252016として2016年1月25日までです(先頭の月は1または2の文字の長さであってもよいことを除いて)1252016は、いずれの場合も10月25日に2016年

で、我々はどちらかとして、月の部分文字列を望みますSUBSTRING("1252016" , 1, 1); => 1または SUBSTRING("10252016" , 1, 2); => 10。例えば

CONCAT_WS("-", 
    SUBSTRING("1252016" , -4, 4) , 
    SUBSTRING("1252016" , 1, 1) , 
    SUBSTRING("1252016" , -6, 2) 
); => "2016-1-25" 

は条件付きで文字列の先頭から1または2文字を取得する方法、またはそうでなければ、文字列の先頭に7位置からマイナスに読み込むための方法はあり、それを逆にする?

別のプログラミング言語を使用できない理由は、日付がLOAD DATA LOCAL INFILEでインポートされるためです。そして、私が理解する限り、私はクエリの構造を制御することしかできません。

+2

は何 '1112016'のための正しい結果でしょうか? 2016年11月1日または2016年1月11日? –

+0

@ JoachimIsakssonそれは正しい 'DATE'としてデータベースに挿入するだけです。フォーマットが 'mdY'または' dmY'で始まるかどうかは、どちらかが先頭の 'd/m'を文字長で1または2とする可能性があるため、無関係です。 – Jonathan

+0

@JoachimIsakssonが正しいです。 7桁の番号を持つ多くの場合、日付形式は本質的にあいまいです。現在指定されているデータインポートの作業は成功しません。データソースで2016年5月12日に「12052016」、2016年1月25日に「01252016」と書くことができれば、この仕事をする機会があります。しかし、もしあなたが '1252016'を手に入れれば、2つの違いを区別することはできません。 –

答えて

3

パッド先行ゼロを持つ文字列、その後、STR_TO_DATE機能を使用します。

SELECT STR_TO_DATE(LPAD('1252016', 8, '0'), '%m%d%Y'); 
+0

ニース、ありがとう! – Jonathan

関連する問題