0

親愛なる皆様、私は過去の市場データをファイルから MySQL テーブルにロードできる Java スクリプトに取り組んでおり、各データ レコードには「日付」フィールドと「タイムスタンプ」フィールドが含まれています。通常のレコードは次のように表されます。

01/11/2010,10:00:00.007,P,210.8,210.86,6,2,R,,2486662,P,P,,0,,N 01/11/2010,10:00:00.577,W, 210.51,211.61,1,1,R,,2487172,W,W,,0,,N

ここで、最初の列は「日付」を表し、2 番目の列は「タイムスタンプ」を表します (ミリ秒単位)。MySQL はミリ秒単位の粒度をサポートしていないため、'timestamp' フィールドの BIGINT (long) 表現を使用しています。

現在、ロード クエリは次のとおりです。

LOAD DATA LOCAL INFILE 'path to file' 
INTO TABLE table
FIELDS TERMINATED BY ','
(@date, @time, remaining columns ...)
SET date=STR_TO_DATE(@date, '%m/%d/%Y'),
SET time=UNIX_TIMESTAMP( STR_TO_DATE(@time, '%H:%i:%S.%f') )

最後の行 (SQLExceptions をスローする) を除いて、クエリは正常に機能します。さまざまなフォーマット パターンを試しましたが、UNIX タイムスタンプに変換する前に、文字列からタイムスタンプへの変換に問題があります。Googleも助けていません。誰かが合理的な解決策を提案できれば、本当に感謝しています。残念ながら、MySQL を他のデータベースに変更することはできません。

よろしく、

4

1 に答える 1

0

UNIX_TIMESTAMP は「日時」文字列を必要としています - あなたはそれに「時間」文字列を与えています。

select UNIX_TIMESTAMP(CONCAT(STR_TO_DATE("01/11/2010", "%m/%d/%Y"), " ", STR_TO_DATE("10:00:00.577", "%H:%i:%S.%f")));
于 2011-03-12T17:17:42.917 に答える