Order by em select com union, firebird 1.5

Bom dia galera, to com o seguinte problema:
estou fazendo uma lista com os aniversariantes… que contém os clientes e os contatos… são de tabelas diferentes… gostaria de resolver isto com uma só select…

segue as duas formas que estou tentando:

(select dtnasc,cdcontato as codigo from contatos where (cdcli is null or cdcli='') and dtnasc is not null) union (select dtnasc,cdcli as codigo from clientes where dtnasc is not null) order by dtnasc asc

e o erro:

e a segunda forma:

select dtnasc,cdcontato as codigo from contatos where (cdcli is null or cdcli='') and dtnasc is not null union select dtnasc,cdcli as codigo from clientes where dtnasc is not null order by dtnasc asc

e o erro:

alguém ai consegue me ajudar?
preciso que venha ordenados todos, no resultado da select no final

abraço!

completando:

Esta é a saída com a seguinte sql:

select dtnasc,cdcontato as codigo from contatos where (cdcli is null or cdcli='') and dtnasc is not null union select dtnasc,cdcli as codigo from clientes where dtnasc is not null

a principio vem ordenado… mas o problema é que quero ordenar por dia e mes, da seguinte forma:

order by extract(month from dtnasc), extract(day from dtnasc)

como faço para conseguir usar isto?