ERROR 1582(42000)调用本机函数' FROM_UNIXTIME'时参数计数不正确

时间:2016-09-17 12:53:29

标签: mysql bash docker mysql-error-1064 owncloud

当我尝试使用bash

转换以下查询中的时间戳时
docker exec compose_TSOwncloudMySQL_1 mysql -h localhost -udockerdev -pdocker owc -e "
SELECT DATE_FORMAT(FROM_UNIXTIME(`timestamp`), '%Y%m%d timestamp%h:%i:%s') AS 'date_formatted',
    oc_ldap_user_mapping.ldap_dn,
    oc_activity.subject,
    oc_activity.file,
    oc_activity.subjectparams
FROM oc_activity INNER JOIN oc_ldap_user_mapping ON oc_activity.user = oc_ldap_user_mapping.owncloud_name 
ORDER BY oc_activity.timestamp;"> /home/dockerdmz/tsowncloud/log_owc/owc_$DATE.log`

我有这个错误:

ERROR 1582 (42000) at line 2: Incorrect parameter count in the call to native function 'FROM_UNIXTIME'

当我在MySQL管理页面中运行此查询时,它运行良好。

SELECT DATE_FORMAT(FROM_UNIXTIME(`timestamp`), '%Y%m%d %h:%i:%s') AS 'date_formatted',
oc_ldap_user_mapping.ldap_dn,
oc_activity.subject, 
oc_activity.file, 
oc_activity.subjectparams
FROM oc_activity INNER JOIN oc_ldap_user_mapping ON oc_activity.user = oc_ldap_user_mapping.owncloud_name
ORDER BY oc_activity.timestamp;

当我运行此bash代码(没有时间戳转换)时,它运行良好

Docker exec compose_TSOwncloudMySQL_1 mysql -h localhost -udockerdev -pdocker owc -e "
SELECT oc_activity.timestamp,
    oc_ldap_user_mapping.ldap_dn,
    oc_activity.subject,
    oc_activity.file,
    oc_activity.subjectparams
FROM oc_activity INNER JOIN oc_ldap_user_mapping ON oc_activity.user = oc_ldap_user_mapping.owncloud_name
ORDER BY oc_activity.timestamp;"> /home/dockerdmz/tsowncloud/log_owc/owc_$DATE.log

1 个答案:

答案 0 :(得分:0)

唉。这是一个重击的事情。

使用bash时尝试使用反斜杠转义反引号,就像这样。

 -e " SELECT DATE_FORMAT(FROM_UNIXTIME(\`timestamp\`),   ...

专业提示:避免对列或表名使用保留字(例如timestamp)。这样你就不必在查询中将它们包装在反引号中,并且你可以在各种上下文中使用相同的查询(bash,php等)。