Javascript 为什么日期格式(?,';%d-%b-%y';)在节点中失败?
我使用node刮取一些数据并将其插入表中 检索到的数据格式为['03-Jan-14',20.18] 我的SQL设置如下:Javascript 为什么日期格式(?,';%d-%b-%y';)在节点中失败?,javascript,mysql,node.js,Javascript,Mysql,Node.js,我使用node刮取一些数据并将其插入表中 检索到的数据格式为['03-Jan-14',20.18] 我的SQL设置如下: var sql = "INSERT INTO data (data_date, data_value) VALUES (date_format(?,\'%d-%b-%y\'),?)"; var insert_data = [parsedResults.data_date, parsedResults.data_value]; sql = mysql.format(sql, i
var sql = "INSERT INTO data (data_date, data_value) VALUES (date_format(?,\'%d-%b-%y\'),?)";
var insert_data = [parsedResults.data_date, parsedResults.data_value];
sql = mysql.format(sql, insert_data);
当我运行脚本时,我得到了这个
INSERT INTO data (data_date, data_value) VALUES (date_format('03-Jan-14','NaN-%b-%y'), 20.18)
我在谷歌上搜索过,但找不到原因。
似乎JavaScript正在解释%d,而不是按原样传递它。
我想了解一下这个问题。
我不想寻找解决办法,我想知道为什么这样做会失败。解决方案是安装dateFormat npm模块并使用该工具格式化日期。使用MySQL str_更新日期是不必要的 我认为这可能比让SQL来处理要容易得多 我仍然不知道如何防止%d被转换为sprintf参数。唤醒线程。。。
若要处理javascript字符串中的%d,必须将其加倍:“%d-%b%y”。一旦解决了该特定问题(看起来
%d
被解释为printf
-样式的十进制)。。。MySQLDATE\u FORMAT
函数需要一个有效的DATE
值作为第一个参数。如果data\u date
列是datatypedate
,我想您应该使用-,它是date\u格式的倒数。FWIW\
中的反斜杠是不必要的,因为您的SQL字符串包含在双引号中,所以只要'
就可以了。另外,我刚刚用mysql
模块测试了您的代码(2.7.0)我无法重现您描述的问题。str_to_date当然是对的。我知道date_格式是错误的,我被跟踪了,忘了检查要使用的正确函数。现在剩下的问题是为什么要解释%d?您的测试代码@msdex是什么?多年后,有人有解决方案吗?我没有他遇到了完全相同的问题!%d正在被转换为NaN!您是否尝试使用“%$d”?是的,部分工作正常,但格式发送方式错误。当我选择“日”粒度时,我将“%Y-%m-%d”作为格式参数传递(用于报告,粒度为日、月、年),并且SQL应返回日期和值,日期格式将作为“2020-10-%d”返回“这真的很奇怪。当使用MySQL Workbench example.Hmm直接在数据库上执行时,从日志中生成的SQL返回正确的值。我放弃了在MySQL中执行SQL,而是使用JavaScript来处理格式化,一切都变得简单多了。