2012-04-28 17 views
2

私の問題の最速の解決方法は、インターネットで約6時間です。日付形式をSQL ServerからMySQLに変換する方法

私はテーブルのいくつかは、列のためのDATETIME形式を持っていますが、これらの列の値は次の形式であるSQL Serverデータベースを持っている:

DD-MM-YYYYのHH:MM 例えば。私は、

今SS:

YYYY-MM-DD HH:MM私の研究のMySQLから 18-12-2012 0時

はそのDATETIME値について、次の形式を受け入れ実際にはデータベースではなくスクリプト自体で変換を試みています。

基本的に私はSQL Server Script Formatの複数のテーブルに250,000以上のレコードを持っています。 私はすでにこの部分を除いてすべての構文をMySQLに変更しました。

何か助けや助言をいただければ幸いです。緊急。

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

競合がないと仮定すると、正規表現を使用して日付をMySQL形式に置き換えることができます。 00秒を追加することなく離れてしまうことができるように、秒単位は省略可能です。 – Corbin

+1

SQL Server *の 'datetime'カラムの値はフォーマットを持っていないことを明確にする必要があります - あなたが表示したのはデフォルトのフォーマットですSSMSは* datetime値を表示する*。 –

答えて

0

編集答え:

また、あなたがRegEx in SQL Server Management Studioを使用することがあります:{[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

enter image description here

+0

まず、あなたの努力のために皆様に感謝したいと思います。これは私がStackOverflow.comで尋ねた最初の質問であり、サポートのレベルに本当に感心しています。 もう少し研究を重ねて、昨年学んだRegExの古いツールキットを思い出しました。だから私はそれをいくつかの良い使い方に入れることに決めました。 をRegexの検索機能のおかげで、私は250000レコードのすべての日付の値をトレースし、それらを必要なものに置き換えることができました。 – Alisneaky

+0

@Alisneaky:また、SSMSでregexを使用することもできます。 –

+0

インストールに問題があるため、SQL Server Management Studioで何も実行できませんでした。私は完全にクラッシュしました.... MySQLとNotepad ++は私の唯一の選択肢でした。しかし、ええ、助言をいただきありがとうございます。 – Alisneaky

2

あなたは日時に知ら形式から日付を変換するためのMySQL STR_TO_DATE()機能を使用することができます。

これは表

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)); 

であり、これはサンプルの挿入であるあなたに に感謝します値。あなたが使用することができます:あなたはdd-mm-yyyy hh:mm(mmは24時間制であるすべての数字0パディングとHH):の日付を持っていると仮定すると

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

あなたはことそうのようなあなたのINSERTクエリでこの機能を使用することができます。

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 
); 

編集

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

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

は、一時的な列を削除します。

+0

私の答えよりも無限に賢明です。私の削除。 +1 – eggyal

+0

すべてのあなたのお返事ありがとうございました。 Salmanの答えは、MySQLで動いているので、これまでのところ最高のものがあったと思います。 INSERTスクリプトにSTR_TO_DATE関数を追加したいが、250000を超えるレコードがある。正規表現を使用して 'DD-MM-YYYY HH:MM'の値を検索するにはどうすればよいですか?私はメモ帳を介してこれをやろうとしている+ +。ありがとう – Alisneaky

+0

あなたは即興する必要があります。数分で私の編集された答えを見てください! –

0

をまずIだろうyに感謝したいあなたの努力のためにすべてに。これは私がStackOverflow.comで尋ねた最初の質問であり、サポートのレベルに本当に感心しています。

もう少し研究を重ねて、昨年学んだRegExの古いツールキットを思い出しました。だから私はそれをいくつかの良い使い方に入れることに決めました。

Notepad ++のRegex検索機能により、私は250000レコードのすべての日付の値をトレースし、必要な値に置き換えることができました。

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

これは、私が持っていた日付形式のために入れた検索でした。日の値とは、置換ボックスに以下を有することが同様に秒を追加した:問題が解決00

3- \

\ 1 \ 4 2- \。

関連する問題