Пустая строка будет преобразована в ноль для типов float и int, но не десятичная. (И конвертируется в 01 января 1900 года для datetime = ноль). Я не знаю почему .. это просто ...
Если вам нужно десятичное число (18,0), используйте вместо него bigint. Или сначала разыграть с помощью поплавка
ISNUMERIC будет принимать -
и .
и 1.2E3
как число, но все не преобразуются в десятичную.