IIf Оператор, управляющий только частью данных в поле

Я создал оператор IIf в запросе MS Access, чтобы заполнить пустые места в определенном поле. Заявление затрагивает только некоторые данные, но не все. Почему это будет работать только на определенный процент записей?

Field:Line_off_Date

Table:Claims

Criteria:IIf(IsNull("Line_off_Date "),"1/1/1900"

Вот официальное Sql после разграничения:

SELECT Claims.Line_off_Date 
FROM Claims
WHERE (((Claims.Line_off_Date)=IIf("Line_off_Date IsNull",#1/1/1900#,"Line_off_Date ")));

Я не могу сделать снимок экрана на этом сайте, но я мог бы представить макет:

Line_off_Date

23.12.2013 23.12.2013 16.05.2010 01.01.1900 01.01.1900

10.12.2000 г. 04.11.2008 г.

Это указано в виде столбца с пробелом между 01.01.1900 и 12.10.2000. Когда я размещаю это здесь, это превращается в абзац. Я надеюсь, что это помогает в некотором роде...

1 ответ

Я не уверен в вашей цели, но похоже, что вы могли бы использовать функцию Nz.

Criteria: Nz(Line_off_Date, "1/1/1900")

Если ты хочешь IIf вместо этого попробуйте это так...

Criteria: IIf(Line_off_Date Is Null, "1/1/1900", Line_off_Date)

Обратите внимание, что эти предложения предполагают Line_off_Date это текстовый тип данных. Если это на самом деле дата / время, разделите значение с помощью # вместо кавычек.

Criteria: Nz(Line_off_Date, #1/1/1900#)
Criteria: IIf(Line_off_Date Is Null, #1/1/1900#, Line_off_Date)

Я больше запутался, увидев ваш WHERE пункт...

WHERE (((Claims.Line_off_Date)=IIf("Line_off_Date IsNull",#1/1/1900#,"Line_off_Date ")));

Помимо вопросов цитирования и так далее, я думаю, что логика ошибочна. Если вы говорите "покажи мне строки, где Line_off_Date = что-то кроме того, что хранится в Line_off_Date msgstr " вы можете не получить никаких строк назад.

Я думаю, что вам нужен другой подход. Если вам нужна дополнительная помощь, покажите нам краткий набор примеров данных и желаемый результат на основе этих данных.

Исходя из обсуждения комментариев, я понимаю, что вы не хотите фильтровать набор результатов на основе Line_off_Date --- это означает, что это не WHERE вопрос пункта. Вместо этого вы хотите получить Line_off_Date ценности, но заменить #1900-1-1# для любого, которые являются Нуль. Если это правильно, выполните преобразование с выражением поля в SELECT пункт.

SELECT Nz(Claims.Line_off_Date, #1900-1-1-#) AS Line_off_Date_adjusted 
FROM Claims;
Другие вопросы по тегам