1

大家好,我正在尝试导入一个非常大的文件,其中包含美国 20 个城市每天每分钟记录的湿度数据。

我有 1 个名为“cityname”的表,该表有 2 列:

-city_ID <- INT and is the primary key which increments automatically
-city_name <- character

我创建了另一个名为“citymoisture”的表,该表有 7 列:

-city_ID <- INT and is the primary key but does NOT increment automatically
-date_holding VARCHAR(30)
-time_holding VARCHAR(30)
-open
-high
-low
-close

date_holding 用于存放日期数据,但由于格式不是 mysql 所期望的(即 m/d/y),我想最初将其存储在此列中,然后再将其转换(除非有办法转换它在导入数据时???)。类似地,time_holding 列保存显示为 hh:mm:ss AM(或 PM)的时间。我只想导入 hh:mm:ss 并忽略它是 AM 还是 (PM)。

在任何情况下,我要导入的文件都有六列:

日期,时间,打开,高,低,关闭。

我想确保正在导入的数据设置了正确的 city_ID 以匹配“cityname”表中的 city_ID。例如:

city_ID city_name
20      Boston 
19      Atlanta

因此,当波士顿的湿度数据导入 citymoisture 表时,city_ID 列设置为 20。同样,当亚特兰大的数据导入 citymoisture 表时,city_ID 列设置为 19。citymoisture 表将非常大,并且会存储未来 20 个城市的 1 分钟湿度数据。

所以我的问题是:

1)有没有办法将文件的内容导入第2-7列并手动指定第一列(city_ID)的值?

2)在我导入时动态转换日期的任何方式,还是我必须首先存储数据,然后转换并存储到最终表格。

3) 与 #2 相同的问题,但针对时间列。

我非常感谢您的帮助。

水分数据文件的样本如下所示:

1/4/1999,9:31:00 AM,0.36,0.43,0.23,0.39  
1/4/1999,9:32:00 AM,0.39,0.49,0.39,0.43  
.  
.  
.  

我不确定 citymoisture 表中的 city_ID 将如何设置。但是如果有办法做到这一点,那么我可以基于两个表运行连接查询,即每个城市每个日期/时间都有一条记录。

4

1 回答 1

1

STR_TO_DATE应该可以获取您的日期和时间

mysql> SELECT STR_TO_DATE('01/01/2001', '%m/%d/%Y');
+---------------------------------------+
| STR_TO_DATE('01/01/2001', '%m/%d/%Y') |
+---------------------------------------+
| 2001-01-01                            |
+---------------------------------------+
1 row in set (0.00 sec)

mysql> SELECT STR_TO_DATE('10:53:11 AM','%h:%i:%s %p');                                                        
+------------------------------------------+
| STR_TO_DATE('10:53:11 AM','%h:%i:%s %p') |
+------------------------------------------+
| 10:53:11                                 |
+------------------------------------------+
1 row in set (0.00 sec)

mysql> 

您将如何“手动”确定每行数据所属的城市,您能否包含导入数据文件的示例行?假设您以某种方式拥有 city_ID,(在下面的代码中替换):

看起来你会想要使用这个:LOAD DATA INFILE

如果您要为其插入数据的城市是来自名为“Boston.dat”的文件中的波士顿,并且您的 cityname 表中存在一个条目:

SET @c_name = 'Boston';
SET @filename = CONCAT(@c_name,'.dat');

LOAD DATA INFILE     @filename
INTO TABLE           city_moisture
(@date, @time, open, high, low, close)
SET                  city_ID=(SELECT city_ID FROM TABLE cityname WHERE city_name=@c_name),
                     date=STR_TO_DATE(@date, '%m/%d/%Y'),
                     time=STR_TO_DATE(@time, '%H:%i:%s %p');

离开 AM PM 部分的时间听起来是个坏主意。

于 2011-03-22T18:37:40.087 回答