Este código funciona:(observe que o espaço é removido após "CAST")
SELECT CAST(20091023 as date);
Acontece que o MySQL requer que uma lista específica de funções internas não tenha espaços entre o nome da função e os parênteses. Veja esta página no Manual do MySQL para obter mais informações sobre por que esse comportamento existe.
A seguinte lista de funções tem a mesma restrição no MySQL 5.1 (há muitas mais nas versões anteriores):
ADDDATE
BIT_AND
BIT_OR
BIT_XOR
CAST
COUNT
CURDATE
CURTIME
DATE_ADD
DATE_SUB
EXTRACT
GROUP_CONCAT
MAX
MID
MIN
NOW
POSITION
SESSION_USER
STD
STDDEV
STDDEV_POP
STDDEV_SAMP
SUBDATE
SUBSTR
SUBSTRING
SUM
SYSDATE
SYSTEM_USER
TRIM
VARIANCE
VAR_POP
VAR_SAMP
Espero que esta resposta ajude você a evitar desperdiçar a mesma quantidade de tempo que eu gastei com isso! :-)