Как работать со значением NULL при использовании DATEPART?

Я использую SQL 2008 R2, и я использовал DATEPART в одной из моих строк выбора, это преобразует столбец даты и времени в десятичное число в зависимости от времени.

Но у меня есть некоторые значения NULL, которые я хотел бы показать как 0. Я использовал ISNULL в других столбцах, но не могу использовать его в этом, потому что я не знаю, как это сделать в сочетании с DATEPART.

Пожалуйста, смотрите ниже, где я использовал datepart, но также хочу изменить нулевые значения на 0.

DATEPART(hour, tblCarerContract.ContractHours) + (DATEPART(minute, tblCarerContract.ContractHours) / 60.0) as ContractHours

Может ли кто-нибудь помочь с этим, пожалуйста.


person Jason Shaw    schedule 06.11.2014    source источник


Ответы (1)


Правильный способ сделать это — использовать оператор COALESCE для изменить нули на 0.

Попробуйте что-нибудь вроде этого

COALESCE(DATEPART(hour, tblCarerContract.ContractHours), 0) + (COALESCE(DATEPART(minute, tblCarerContract.ContractHours), 0) / 60.0) as ContractHours
person Spaceman Spiff    schedule 06.11.2014
comment
Привет, Ян, только что проверил, работает отлично. большое спасибо, это сводило меня с ума. как вы можете видеть, я все еще очень новичок в этом. Еще раз спасибо за вашу помощь ! - person Jason Shaw; 06.11.2014
comment
Я думаю, что на самом деле лучше использовать ISNULL, так как он фактически избавляется от нулевого значения. COALESCE по-прежнему возвращает тип, допускающий значение NULL. - person Dave Cousineau; 07.02.2019