2

我已经在互联网上搜索了将近 6 个小时,以最快地解决我的问题。

我有一个 SQL Server 数据库,其中一些表的列具有 DATETIME 格式,但这些列中的值采用以下格式:

DD-MM-YYYY HH:MM 例如。18-12-2012 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

编辑答案:

此外,您可以在 SQL Server Management Studio 中使用 RegEx

找什么:{[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

在此处输入图像描述

于 2012-04-28T10:27:30.413 回答
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 回答