El error no puede ser por el texto 'No Date' ya que en el where estas diciendo que esos registros no los seleccione, más bien puede haber registros con valor nulo (NULL) para el campo varchar, que obviamente, es distinto de la cadena vacía.
Yo lo haría de este modo:
crearía un nuevo campo en la tabla de tipo date. Valor por defecto NULL
ahora intento el copiado asi (Fecha es el nuevo campo de tipo Date):
Código SQL
[-]
update mytable set Fecha = CAST((SUBSTRING ( MyDATE_VARCHAR FROM 7 FOR 4 )
||'/'||SUBSTRING ( MyDATE_VARCHAR FROM 4 FOR 2 )
||'/'||SUBSTRING ( MyDATE_VARCHAR FROM 1 FOR 2 )) AS DATE)
WHERE
MyDATE_VARCHAR <> 'No Date'
AND MyDATE_VARCHAR <> ''
AND MyDATE_VARCHAR IS NOT NULL
Ahora los que tienen fecha, ya tienen su valor asignado.
Los que tienen 'No Date' o eran nulos o era un texto vacío, ya tienen un NULL, PERO es muy posible que haya registros con otros valores distintos, y sería bueno comprobarlo con:
Código SQL
[-]
select fecha, fecha_VARCHAR
from mytable
where
fecha is null
AND MyDATE_VARCHAR <> 'No Date'
AND MyDATE_VARCHAR <> ''
AND MyDATE_VARCHAR IS NOT NULL
Si esta consulta devuelve algún registro, tendrás que asignar el campo Fecha al valor que creas conveniente.
La verdad, no sé por qué usas el operador "!=" yo siempre he usado "<>" en Firebird.
Edito: hay una pequeña incongruencia en lo expuesto: Dices que quieres el formato dd/mm/aaaa, sin embargo, el SQL pone el formato aaaa/mm/dd. Yo no sé el formato que espera Firebird para una fecha, ya que siempre he usado la biblioteca rfunc que trae una UDF encodeDate.
Saludos