Я думаю, что это связано с типами данных.BinaryData имеет целочисленный тип данных, но substr (BinaryData, 1,4) ожидает строку.CAST тогда путается с результатом.Кроме того, CAST анализирует строки, используя базу 10, поэтому вам нужно немного дополнительной работы.Попробуйте это:
CAST(CONV(substr(HEX(BinaryData),1,8), 16, 10) AS SIGNED) As col4
Это монстр, но он должен дать вам то, что вы хотите.