簡體   English   中英

MySQL導入文件中超過60秒或分鍾

[英]More than 60 seconds or minutes in MySQL import file

我目前正在將CSV文件導入到MySQL表中,其中包含以下行:

2/28/2015 8:46:30 PM,1:40,2,1234567,1435.6071
2/28/2015 8:45:58 PM,0:19,1,1234568,1435.6436

基本上是PBX的CDR。 但是,我沒有信息源的控制權,因此我只是按原樣接收此文件。 到目前為止,列為:

DATE,DURATION,MINUTES,PHONE,BALANCE

我使用LOAD DATA INFILE導入數據,如下所示:

LOAD DATA INFILE '10811.csv'
INTO TABLE cdr
fields terminated by ','
lines terminated by '\n'
(@col1, @col2, MINUTES, PHONE, BALANCE)
set DATE = STR_TO_DATE(@col1,'%m/%d/%Y %h:%i:%s %p'),
DURATION = STR_TO_DATE(@col2,'%i:%s'),
CARDID = 10811;

CARDID只是一個用於存儲我的源文件名的字段

問題是:持續時間給了我很多問題。 請參閱:一些行是這樣的:

2/28/2015 8:46:30 PM,140:28,141,1234569,1435.6071

這意味着持續時間為140分鍾28秒; 但是,如果我存儲該值,它將給我一個錯誤。 這是因為:

> SELECT str_to_date('140:28','%i:%s') AS DATE;
+------+
| DATE |
+------+
| NULL |
+------+

因為%i期望分鍾在00到59之間。

我嘗試使用SEC_TO_TIME,但也失敗了(它只需要第一個數字):

> SELECT sec_to_time('140:28') AS DATE;
+----------+
| DATE     |
+----------+
| 00:02:20 |
+----------+

如何修改查詢(請僅使用SQL)以正確的格式存儲該時間?

與小時格式說明符“%H”和“%k”接受大於0-23范圍的值不同,沒有分鍾格式說明符接受大於0-59范圍的值。

您可以使用MYSQL提供的字符串函數將DURATION字段轉換為正確的格式(例如140:28-> 2:20:28)。

但是更好的做法是使用其他工具/語言/腳本來進行字符串轉換,該工具/方法/語言/腳本比MYSQL的字符串函數在字符串操作時更高效,更容易。

我設法通過字符串操作解決了這個問題。 這不是最優雅的解決方案,但是,嘿! 有用!

LOAD DATA INFILE '10811.csv'
INTO TABLE cdr
fields terminated by ','
lines terminated by '\n'
(@col1, @col2, MINUTES, PHONE, BALANCE)
set DATE = STR_TO_DATE(@col1,'%m/%d/%Y %h:%i:%s %p'),
DURATION = SEC_TO_TIME(SUBSTRING_INDEX(@col2,':',1)*60+SUBSTRING_INDEX(@col2,':',-1))
CARDID = 10811;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM