Mysql STR_TO_日期和加载数据填充格式问题

Mysql STR_TO_日期和加载数据填充格式问题,mysql,sql,load-data-infile,str-to-date,Mysql,Sql,Load Data Infile,Str To Date,谢谢大家的帮助。看起来它是日期格式中未转义的字符:“%d/%%m/%%Y%%H:%%i”是我所需要的。因为这是从批处理文件运行的,所以我没有考虑到这一点 我有一个运行SQL命令的批处理文件,我认为我了解需要什么,但似乎无法将所有这些都整合到一起。当我运行下面的代码时,我得到了所有要正确导入的内容,但是要么我的STR_to_日期格式设置必须关闭,要么我针对第二列的方式必须关闭,因为当我运行下面的脚本时,我的DATETIME列中只有“(NULL)”或全零 下面是我从命令提示符窗口看到的屏幕截图。可疑

谢谢大家的帮助。看起来它是日期格式中未转义的字符:“%d/%%m/%%Y%%H:%%i”是我所需要的。因为这是从批处理文件运行的,所以我没有考虑到这一点

我有一个运行SQL命令的批处理文件,我认为我了解需要什么,但似乎无法将所有这些都整合到一起。当我运行下面的代码时,我得到了所有要正确导入的内容,但是要么我的STR_to_日期格式设置必须关闭,要么我针对第二列的方式必须关闭,因为当我运行下面的脚本时,我的DATETIME列中只有“(NULL)”或全零

下面是我从命令提示符窗口看到的屏幕截图。可疑部分以绿色突出显示:

有什么想法吗

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
)
下面是我使用加载数据填充函数访问的文件示例

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

STR\u TO\u DATE
的字符串格式应为:

%d/%m/%Y %H:%i

你错过了斜线。

正如迈克·布兰特所说,你错过了斜线

此外,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')

看,这也是我在某一点上的想法,但我仍然得到相同的结果。据我所知,这方面的文档似乎非常清楚。我只是不正确地瞄准了第二列吗?再次添加了斜杠,甚至将%y替换为%y,但我仍然在同一条船上。我将更新我的原始问题,以包括创建表代码。不妨试试你的其他建议。感谢您的帮助。我已经发布了运行脚本时命令提示符显示的屏幕截图。我不得不模糊一些东西,但我也用绿色突出了我发现可疑的部分: