好的,谢谢大家的帮助。看起来它在日期格式中是一个未转义的字符:'%% d / %% m / %% Y %% H:%% i'是我需要的。由于这是从批处理文件运行的,所以我没有考虑到这一点。
我有一个运行SQL命令的批处理文件,我认为我理解了所需要的内容,但似乎无法将它们全部集合在一起。当我运行下面的代码时,我可以正确导入所有内容,但是我的STR_TO_DATE格式必须关闭,或者我要定位第二列的方式必须关闭,因为我只是得到“(NULL)”或者我的全部为零我在下面运行脚本时的DATETIME列。
这是我从命令提示符窗口看到的截图。可疑部分以绿色突出显示:http://i.imgur.com/TztR31p.png?1
有什么想法吗?
CREATE TABLE `serials` (
`Serial` INT(10) UNSIGNED NULL DEFAULT '0',
`Stamp` DATETIME NULL DEFAULT NULL,
`Data1` MEDIUMINT(8) UNSIGNED NULL DEFAULT '0',
`Data2` MEDIUMINT(8) UNSIGNED NULL DEFAULT '0',
`Data3` MEDIUMINT(8) UNSIGNED NULL DEFAULT '0',
`Data4` MEDIUMINT(8) UNSIGNED NULL DEFAULT '0',
`Data5` MEDIUMINT(8) UNSIGNED NULL DEFAULT '0',
`Data6` MEDIUMINT(8) UNSIGNED NULL DEFAULT '0',
`Data7` MEDIUMINT(8) UNSIGNED NULL DEFAULT '0',
`Data8` MEDIUMINT(8) UNSIGNED NULL DEFAULT '0',
INDEX `StampINX` (`Stamp`),
INDEX `SerialINX` (`Serial`)
)
COLLATE='latin1_swedish_ci'
ENGINE=MyISAM;
echo on
setlocal enabledelayedexpansion
FOR %%f IN ("*.csv") DO (
set old=%%~dpnxf
set new=!old:\=\\!
mysql -e "LOAD DATA local INFILE '"!new!"' IGNORE into table test.serials COLUMNS TERMINATED BY ','
(Serial,@Stamp,Data1,Data2,Data3,Data4,Data5,Data6,Data7,Data8) SET
Stamp=STR_TO_DATE(@Stamp,'%d/%m/%Y %H:%i')" -u root -ppassword
echo %%~nxf DONE
)
及以下是我使用LOAD DATA INFILE函数访问的文件的示例
Serial,Stamp,Data1,Data2,Data3,Data4,Data5,Data6,Data7,Data8
50183,01/01/2012 00:15,0,77,73,84,0,0,3,62
50183,01/01/2012 00:30,0,100,45,77,0,0,3,67
50183,01/01/2012 00:45,0,96,62,73,0,0,2,61
50183,01/01/2012 01:00,0,81,79,85,0,0,3,56
答案 0 :(得分:0)
STR_TO_DATE
的字符串格式应为:
%d/%m/%Y %H:%i
你错过了斜杠。
答案 1 :(得分:0)
正如迈克布兰特所说,你错过了斜线。
此外,4位数年份为%Y
,而不是%y
。
有时使用这种类型的项目,首先在测试表中将数据加载到MySQL中的字符串列中是很有用的,然后可以测试函数以确保它们根据需要转换值。
您还可以轻松测试单个值,以确保日期格式正确无误:
mysql > \W
Show warnings enabled.
mysql > select str_to_date('01/01/2012 01:00','%d%m%y %H:%i');
+------------------------------------------------+
| str_to_date('01/01/2012 01:00','%d%m%y %H:%i') |
+------------------------------------------------+
| NULL |
+------------------------------------------------+
1 row in set, 1 warning (0.00 sec)
Warning (Code 1411): Incorrect datetime value: '01/01/2012 01:00' for function str_to_date
mysql > select str_to_date('01/01/2012 01:00','%d/%m/%y %H:%i');
+--------------------------------------------------+
| str_to_date('01/01/2012 01:00','%d/%m/%y %H:%i') |
+--------------------------------------------------+
| NULL |
+--------------------------------------------------+
1 row in set, 1 warning (0.00 sec)
Warning (Code 1411): Incorrect datetime value: '01/01/2012 01:00' for function str_to_date
mysql > select str_to_date('01/01/2012 01:00','%d/%m/%Y %H:%i');
+--------------------------------------------------+
| str_to_date('01/01/2012 01:00','%d/%m/%Y %H:%i') |
+--------------------------------------------------+
| 2012-01-01 01:00:00 |
+--------------------------------------------------+
1 row in set (0.00 sec)
这应该适合你:
SET Stamp=STR_TO_DATE(@Stamp,'%d/%m/%Y %H:%i')