• Выполнение CASE

    SatansClaws
    @SatansClaws
    дык, проверьте данные в таблице
    я на 80% уверен, что в ней есть строки вида "[число].[число]" или близкое к такому
    короче, для которого IsNumeric() вернет 1, но приведение типа не сработает

    кстати, мой вариант ломается при наличии в данных значения '.'

    ЗЫ каст плох тем, что
    а) конвертить дату из строки или наоборот выходит ненадежно
    б) он таки устаревший. А значит рано или поздно его в скуле не станет (и есть ли он в MS SQL 2012?).
    А поскольку какие-то удачные куски кода имеют свойство мигрировать из проекта в проект — может оказаться, что он где-то всплывет, даже если СУБД этого проекта вы апдейтить не будете.
    Ответ написан
  • Выполнение CASE

    SatansClaws
    @SatansClaws
    по табличке GalinaM ваш запрос прекрасно выполняется

    Но вот если воткнуть в данные строку вида '1.1' — то ваш запрос ломается,
    а вот такое условие — работает:
    WHERE 
    	CASE 
    		--WHEN ISNUMERIC (stringwithnumeric)=1 THEN CAST (stringwithnumeric AS INT) 
    		WHEN ISNUMERIC (stringwithnumeric)=1 THEN convert(int, convert(numeric(19, 3), stringwithnumeric))
    		ELSE 0 
    	END > 0
    


    ЗЫ отучайтесть использовать CAST — он оставлен для обратной совместимости. Используйте CONVERT
    Ответ написан