1
我能夠使用LOAD DATA INFILE成功獲取我上傳的csv文件。我可以跳過所有我不需要的數據/列(Manual 13.2.6)對日期格式使用LOAD DATA INFILE的多個SET字段
我能夠使用SET命令設置日期格式。我的問題是,如果我有多個日期字段,那麼SET命令的任何變體與上面的結合都不想在我有多個SET時工作。
<?php
if (isset($_POST['load']))
{
include '_inc/include.php';
$temp = $_FILES['myfile']['tmp_name'];
$sqlstatement="LOAD DATA LOCAL INFILE '$temp' INTO TABLE 000_1616 FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\"' LINES TERMINATED BY '\r\n' IGNORE 1 LINES (id, @somedate, name, anotherdate, color, 1moredate) SET sdate = IF(LENGTH(@somedate)=7,STR_TO_DATE(@somedate,'%m/%d/%Y'),STR_TO_DATE(@somedate,'%m/%d/%y'))";
mysql_query($sqlstatement) or die(mysql_error());
echo "It worked";
echo "<p><a href='upload-display.php'>go to page</a></p>";
}
?>
<form method="post" action="upload.php" enctype="multipart/form-data">
<input name="myfile" type="file" />
<input name="load" type="submit" value="submit" /></form>
我的設置是這樣的
SET sdate = IF(LENGTH(@somedate)=7,STR_TO_DATE(@somedate,'%m/%d/%Y'),STR_TO_DATE(@somedate,'%m/%d/%y'))";
或
$sqlstatement="LOAD DATA LOCAL INFILE '$temp' INTO TABLE 000_1616 FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\"' LINES TERMINATED BY '\r\n' IGNORE 1 LINES (id, @somedate, name, anotherdate, color, 1moredate) SET sdate = IF(LENGTH(@somedate)=7,STR_TO_DATE(@somedate,'%m/%d/%Y'),STR_TO_DATE(@somedate,'%m/%d/%y'))";
我用@somedate第一次約會場這實在是SDATE。只要我不嘗試使用SET添加4個更多的日期字段,這個效果很好。我想添加@anotherdate(anotherdate)和@ 1moredate(1moredate)我必須設置一個數組嗎?我需要在phpMyADMIN方面的表中做些什麼嗎?現在它們被格式化爲Date,但除了提交的第一個日期之外,它們都返回000-00-00。
這裏是SQL:
SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";
/*!40101 SET @[email protected]@CHARACTER_SET_CLIENT */;
/*!40101 SET @[email protected]@CHARACTER_SET_RESULTS */;
/*!40101 SET @[email protected]@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
--
-- Database: `database_track`
--
-- --------------------------------------------------------
--
-- Table structure for table `000_datetest`
--
CREATE TABLE IF NOT EXISTS `000_datetest` (
`id` int(11) NOT NULL auto_increment,
`sdate` date default NULL,
`name` varchar(100) collate utf8_unicode_ci default NULL,
`anotherdate` date NOT NULL,
`color` varchar(50) collate utf8_unicode_ci NOT NULL,
`1moredate` date NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=6 ;
/*!40101 SET [email protected]_CHARACTER_SET_CLIENT */;
/*!40101 SET [email protected]_CHARACTER_SET_RESULTS */;
/*!40101 SET [email protected]_COLLATION_CONNECTION */;
CSV例如:
+----+---------------+-------------------+---------------------+------------+-------------------+
| id | sdate | name | anotherdate | color | 1moredate |
+----+---------------+------------------------+---------------+------------+-------------------+
| 1 | 2011-08-21 | Tom Thumb | 08/16/2010 | Blue | 1/5/08 |
+----+---------------+------------------------+---------------+------------+-------------------+
| 1 | 2009-05-12 | Don Duck | 03/22/2012 | Yellow | 9/15/03 |
+----+---------------+------------------------+---------------+------------+-------------------+
1 row in set (0.00 sec)
我希望這可以幫助,請參考下面
你能提供表結構 - CREATE TABLE語句和CSV文件的例子嗎? – Devart 2013-02-14 07:09:21
是的,我不知道如何在這裏上傳它。轉到此鏈接:http://muldoon.cc/010203/您可以測試表單並或單獨下載ZIP或所有文件 – 2013-02-14 14:48:39
它不是一個CSV文件,它是包含數據的簡單文本文件。你應該跳過每一個奇數記錄,但是LOAD DATA INFILE不能這樣做。 – Devart 2013-02-18 08:40:55