我有一个查询的以下部分:
STR_TO_DATE(CONCAT(g.Year,',',g.Month,',',g.Day),'%Y,%m,%d') AS HelpDate
g当然是一张表。我知道g.Year,g.Month和g.Day的值都很好,因为如果我取出STR_TO_DATE调用并且只使用:
CONCAT(g.Year,',',g.Month,',',g.Day) AS HelpDate
它工作正常。出于某种原因,mysql因添加STR_TO_DATE而中断。据我所知,这应该有效。我甚至试图对日期进行严格编码,以强制它确保我没有疯狂:
STR_TO_DATE('2011,9,2','%Y,%m,%d') AS HelpDate
这既不起作用
确定。所以STR_TO_DATE对我来说根本不起作用的原因是因为服务器运行的是MySQL 4.0。我已经将数据库移动到MySQL5服务器。现在,这是我的问题。 STR_TO_DATE只有在我不尝试连接表引用时才有效。例如,这两个工作:
STR_TO_DATE('2011,9,2','%Y,%m,%d') AS HelpDate
STR_TO_DATE(CONCAT('2011',',','9',',','2'),'%Y,%m,%d') AS HelpDate
然而,这仍然没有:
STR_TO_DATE(CONCAT(g.Year,',',g.Month,',',g.Day),'%Y,%m,%d') AS HelpDate
我收到此错误:
#1305 - FUNCTION db380975735.STR_TO_DATE does not exist
db38097573是数据库的名称
答案 0 :(得分:2)
您正在寻找格式'%Y,%c,%e'
。 %m
和%d
匹配以零开头的月/日(它将匹配2011,09,02
)。
顺便说一下,分别存储年,月和日的重点是什么?将其存储在DATE类型中,并在必要时使用YEAR(),DAY()和MONTH()函数。
答案 1 :(得分:0)
尝试使用:
STR_TO_DATE('2011,9,2','%Y,%c,%e') AS HelpDate
%m
和%d
假设使用前导零进行格式化,即总是两位数的数字。因此STR_TO_DATE('2011,09,02','%Y,%m,%d') AS HelpDate
可能会起作用。 %c
和%e
分别指代可变长度的数字月份和日期。