gpt4 book ai didi

php - 多个 SET 字段使用 LOAD DATA INFILE 作为日期格式

转载 作者:行者123 更新时间:2023-11-29 03:40:22 30 4
gpt4 key购买 nike

我能够使用 LOAD DATA INFILE 成功上传我的 csv 文件。我可以跳过我不需要的所有数据/列 ( Manual 13.2.6 )

我能够使用 SET 命令来设置日期格式。我的问题是,如果我有多个日期字段怎么办,当我有超过 1 个 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 是这样的

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,这真的很安全。只要我不尝试使用 SET 添加 4 个以上的日期字段,这就可以正常工作。我想添加@anotherdate(anotherdate) 和@1moredate(1moredate) 是否必须设置一个数组?我需要在 phpMyADMIN 端的表中做些什么吗?现在它们被格式化为日期,但除了第一个归档日期外,它们都返回 000-00-00。

这是 SQL:

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";


/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@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 CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_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)

我希望这对您有所帮助,请在下面的评论中查看物理文件

最佳答案

要在 LOAD DATA INFILE 中使用多个 SET 命令,您只需指定一次 SET 并用逗号分隔每个变量定义,例如。

LOAD DATA INFILE 'my_file' INTO TABLE 'my_table' (column1, @date1, @date2)
SET column2 = STR_TO_DATE(@date1, '%d/%m/%Y %H:%i:%s'),
column3 = STR_TO_DATE(@date2, '%d/%m/%Y %H:%i:%s');

关于php - 多个 SET 字段使用 LOAD DATA INFILE 作为日期格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14866893/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com