2

私の問題に対する最速の解決策を求めて、インターネットをほぼ 6 時間検索してきました。

一部のテーブルの列が DATETIME 形式になっている SQL Server データベースを使用していますが、これらの列の値は次の形式になっています。

DD-MM-YYYY HH:MM 例: 2012 年 12 月 18 日 00:00

私の調査によると、MySQL は次の形式の DATETIME 値のみを受け入れます。

YYYY-MM-DD HH:MM:SS

今、私は実際に、データベースではなく、スクリプト自体で変換を行おうとしています。

基本的に、SQL Server スクリプト形式の複数のテーブルに 250,000 を超えるレコードがあります。この部分を除いて、すべての構文を MySQL に変更済みです。

ヘルプやアドバイスをいただければ幸いです。急。

ありがとう これはテーブルです

CREATE TABLE Price(
  AirlineCode   char(2)     NOT NULL
, FlightNumber  varchar(6)  NOT NULL
, ClassCode     char(3)     NOT NULL
, TicketCode    char(1)     NOT NULL
, StartDate     DateTime    NOT NULL
, EndDate       DateTime    NOT NULL
, Price         decimal     NOT NULL
, PriceLeg1     decimal         NULL
, PriceLeg2     decimal         NULL

, PRIMARY KEY   ( 
                    AirlineCode, 
                    FlightNumber, 
                    ClassCode, 
                    TicketCode, 
                    StartDate 
                )
, FOREIGN KEY (AirlineCode) REFERENCES Airlines (AirlineCode)
, FOREIGN KEY (ClassCode)   REFERENCES TicketClass (ClassCode)
, FOREIGN KEY (TicketCode)  REFERENCES TicketType (TicketCode));

これは挿入例です。

INSERT INTO Price VALUES ( 'QF', 'QF67',   'ECO', 'E', '18-12-2012 00:00', '04-01-2013 00:00', 3427.82, 1636.14, 2045.20 );
4

3 に答える 3

2

MySQLSTR_TO_DATE()関数を使用して、日付を既知の形式から日時値に変換できます。日付があると仮定するとdd-mm-yyyy hh:mm(すべての数字が 0 で埋められ、hh:mm は 24 時間制)、次を使用できます。

SELECT STR_TO_DATE('18-12-2012 00:00', '%d-%m-%Y %k:%i')
-- 2012-12-18 00:00:00

次のように、挿入クエリでこの関数を使用できます。

INSERT INTO Price VALUES (
'QF',
'QF67',
'ECO',
'E',
STR_TO_DATE('18-12-2012 00:00', '%d-%m-%Y %k:%i'),
STR_TO_DATE('04-01-2013 00:00', '%d-%m-%Y %k:%i'),
3427.82,
1636.14,
2045.20
);

編集

挿入クエリを編集できない場合は、MySQL にすべての変換を任せることができます。日時列のデータ型を一時的に変更し、データをVARCHARインポートします。次に一時フィールドを追加しStartDate_Temp DATETIME、更新クエリを実行します。

UPDATE Price SET StartDate_Temp = STR_TO_DATE(StartDate, '%d-%m-%Y %k:%i')

データに問題がないことを確認したら、一時列を削除します。

于 2012-04-28T09:17:46.973 に答える
0

まず初めに、皆様のご尽力に感謝の意を表したいと思います。これは私が StackOverflow.com で尋ねた最初の質問であり、サポートのレベルに本当に感銘を受けました。

もう少し調べてみると、昨年学んだ RegEx の古き良きツールキットを思い出しました。ということで、これを有効活用することにしました。

Notepad++ では、正規表現検索機能のおかげで、250000 レコードのすべての日付値を追跡し、それらを必要なものに置き換えることができました。

([0-9][0-9])-([0-9][0-9])-([0-9][0-9][0-9][0-9]) ([ 0-9][0-9]:[0-9][0-9])

これは私が持っていた日付形式を検索した後、年と日の値を交換し、[置換] ボックスに次のように入力して秒を追加しました。

\3-\2-\1 \4:00

問題が解決しました。

于 2012-04-29T01:49:39.643 に答える