powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / EMPTY() и значения Numeric
22 сообщений из 22, страница 1 из 1
EMPTY() и значения Numeric
    #32395523
coolkenga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Какие значения выдаст запрос
Код: plaintext
select * from table1 where empty(field1) 
?

Пустые и нули? Почему тогда этот же запрос ничего не выдает, если empty поменять на isnull или isblank ?

Тип поля field1 Numeric(12,0)
...
Рейтинг: 0 / 0
EMPTY() и значения Numeric
    #32395552
Crip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
isblank записи добавленные по append blank и очищенные с помощью blank
empty выдаст тоже что и isblank() и 0
isnull выдаст все имеющие значения NULL
...
Рейтинг: 0 / 0
EMPTY() и значения Numeric
    #32395574
coolkenga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а чем отличаются значения очищенные с помощью blank и NULL?
...
Рейтинг: 0 / 0
EMPTY() и значения Numeric
    #32395602
coolkenga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
проблема в том, что нужно выбрать пустые значения, но отсечь нули:
isblank не показывает вообще никакие значения, isnull тоже, условие
Код: plaintext
select * from table1 where empty(field1) and field1 <>  0 
тоже не дает желаемого результата.
...
Рейтинг: 0 / 0
EMPTY() и значения Numeric
    #32395633
Crip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Значит нет там пустых... NULL и blank это не одно и тоже...
...
Рейтинг: 0 / 0
EMPTY() и значения Numeric
    #32395648
U_bar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Значение NULL может быть только если установлено SET NULL ON

Если установлено OFF то пустое значение =0
...
Рейтинг: 0 / 0
EMPTY() и значения Numeric
    #32395677
Фотография Анатолий Широков
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 U_bar

RTFM SET NULL

MSDN
...
SET NULL affects only how null values are supported by ALTER TABLE, CREATE TABLE and INSERT - SQL. Other commands are unaffected by SET NULL.

SET NULL is scoped to the current data session.
...
...
Рейтинг: 0 / 0
EMPTY() и значения Numeric
    #32395683
coolkenga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Значит нет там пустых... NULL и blank это не одно и тоже...
Мне непонятно, почему
Код: plaintext
select * from table1 where empty(field1)

выдает 2 записи, а
Код: plaintext
select * from table1 where empty(field1) and field1 <>  0 

не выдает ни одной записи.

Значение NULL может быть только если установлено SET NULL ON
Если установлено OFF то пустое значение =0
я руками добавляла а таблицу строчку - добавляется пустое поле
...
Рейтинг: 0 / 0
EMPTY() и значения Numeric
    #32395694
Фотография Анатолий Широков
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне непонятно, почему
Код: plaintext
1.
select * from table1 where empty(field1)



выдает 2 записи, а
Код: plaintext
1.
select * from table1 where empty(field1) and field1 <>  0 


А что Вас удивляет?

Первый запрос читается так: вывести все записи, у которых поле field1 пустое.
Второй запрос читается иначе: вывести все записи, у которых поле field1 пустое и в тоже самое время не равно 0, что является тождественной ЛОЖЬЮ, поскольку никогда не может быть выполнено.
...
Рейтинг: 0 / 0
EMPTY() и значения Numeric
    #32395727
coolkenga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А что Вас удивляет?
Первый запрос читается так: вывести все записи, у которых поле field1 пустое.
или равное 0 - выводится одна с пустым значением, вторая с равным нулю.
...
Рейтинг: 0 / 0
EMPTY() и значения Numeric
    #32395737
Фотография Анатолий Широков
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Отнюдь, AND всегда было и остается связкой И, а не ИЛИ.
...
Рейтинг: 0 / 0
EMPTY() и значения Numeric
    #32395757
coolkenga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а запрос
Код: plaintext
select * from table1 where field1 =  0 

выводит те же 2 записи, которые и на empty выводятся - одна с пустым значением поля, другая с нулем

Чего я не понимаю?
...
Рейтинг: 0 / 0
EMPTY() и значения Numeric
    #32395763
coolkenga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторОтнюдь, AND всегда было и остается связкой И, а не ИЛИ.
Я про первый запрос говорила, а там никакой связки нет - empty выводит все пустые или равные нулю значения

никто не даст ссылку, (кроме MSDN), где все это описывается с примерами?
...
Рейтинг: 0 / 0
EMPTY() и значения Numeric
    #32395820
andrew_Pr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to coolkenga
В FoxPro
EMPTY( ) возвращает True (.T.) если выражение имеет следующие значения:
Character : Пустая строка, пробел, возврат каретки
Numeric : 0
Date : {}
Logical : False (.F.)

А .null. это .null., это отсутствие любого, даже "пустого" значения.

так что пустое (в понимании VFP), но в то же время не нулевое значение -
не может быть в принципе,
а вот "Null-евое", но не "Ноль-евое" - может.

>>никто не даст ссылку, (кроме MSDN)?
В MSDN это как раз очень хорошо и описано.
...
Рейтинг: 0 / 0
EMPTY() и значения Numeric
    #32395822
Фотография Анатолий Широков
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Причина в том, в запросе как такового понятия бланк поля нет, поэтому якобы пустое поле трактуется фоксом как равное 0, поэтому empty возращает в обоих случаях ноль:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
create cursor test (num i, field1 n( 12 , 0 ))

select test
append blank 
? isblank(field1), empty(field1)
replace field1 with  0 
? isblank(field1), empty(field1)


Поэтому для различия "пустого" - поле значение, которого не известно от нуля и используется NULL. Тогда для проверки есть значение или нет необходимо использовать функцию ISNULL, но эта функция медленная - не оптимизируется.
...
Рейтинг: 0 / 0
EMPTY() и значения Numeric
    #32395857
coolkenga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторПричина в том, в запросе как такового понятия бланк поля нет, поэтому якобы пустое поле трактуется фоксом как равное 0, поэтому empty возращает в обоих случаях ноль:
True?
Только странно почему isblank() не выдает ту, пустую запись...

>>никто не даст ссылку, (кроме MSDN)?
В MSDN это как раз очень хорошо и описано.
Не спорю, но если все так, как написано у них, то кроме нулей ничего выдаваться не должно. Или у них просто четко не написано, что значит "the expression evaluates to empty".
...
Рейтинг: 0 / 0
EMPTY() и значения Numeric
    #32396006
Фотография neznajka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дорогая Coolkenga , я когда-то с такой ситуацией сталкивался - Ваша беда в том, что в Фоксе действительно нет никакого способа отличить незаполненное оператором числовое поле и поле с 0-значением - с точки зрения Вашего запроса это одно и то же (для Фокса). Самый простой выход (раз уж Вы сами создавали такую таблицу и заполняли вручную) - надо было числовые поля создавать как символьные а затем при подсчетах пользоваться преобразованием VAL(). Уж строчный '0' от пустой строки Фоксовский SQL отличить сможет. Кстати, по поводу повторяющихся комбинаций полей (Ваш предыдущий вопрос) - если еще актуально, загляните, я там предложил может и не самый лучший вариант, зато легко дополняемый и модернизируемый.
...
Рейтинг: 0 / 0
EMPTY() и значения Numeric
    #32396321
Urri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добавлю, что если встать на запись, где в числовом значении X "пусто" и написать команду:
?X
, то на экране появится 0.
...
Рейтинг: 0 / 0
EMPTY() и значения Numeric
    #32396394
coolkenga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо всем. :)
Отдельное спасибо neznajka за продолжение треда про "повторяющиеся комбинации полей" и за "дорогую" :))

Беда-то моя, но создавала таблицу не я, я правила непосредственно dbf, пытаясь сымитировать реальные данные.
Возможно, когда люди заносят данные через пакет (скромно надеюсь) - там будет все-таки NULL. Реального примера с такими записями нет под руками - будет, проверю.
Жаль, что в пакет не залезешь и не проверишь - стоит ли там SET NULL перед вставкой... Хотя там возможно и не используются команды SQL для вставки...
...
Рейтинг: 0 / 0
EMPTY() и значения Numeric
    #32401440
Фотография neznajka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Надеюсь, Вам это пригодится, Coolkenga:
Хотя в MSDN достаточно подробно описано применение NULL-значений, все же остаются неочевидными некоторые весьма важные моменты, касающиеся модификации уже существующих таблиц. На мой взгляд, лучше всего это описано М.Базияном в его руководстве по VFP6. К сожалению, не у всех есть возможность доступа к этому справочнику, а вопрос-то весьма актуальный, поэтому привожу здесь соответствующее описание полностью.
Использование значений NULL
В более ранних версиях FoxPro невозможно было определить, преднамеренно ли оставил пользователь поле пустым или просто забыл о нем. В FoxPro незаполненное поле (в зависимости от его типа) интерпретируется либо как пустая символьная строка, либо как числовое значение 0, либо как логическое значение False (Ложь). Любое из этих значений может быть допустимым для поля. Например, если таблица с информацией о служащих содержит поле, предназначенное для хранения средних инициалов служащего, то означает ли пустое значение, что пользователь случайно не ввел его, или же у служащего попросту нет среднего инициала? Что касается числовых полей, то как расценивать нулевое значение поля, содержащего объем закупок за предыдущий год? Так, что клиент не имел сделок или что суммы закупок и возвратов в точности компенсировали друг друга? Наконец, возьмем поля типа Logical: невозможно определить, на самом ли деле пользователь подразумевал ложное значение или просто не заполнил это поле (по умолчанию незаполненное логическое поле в FoxPro трактуется как содержащее .F. – ложь). Предположим, что Джон Смит не ответил на вопрос "Вы женаты?", в результате чего пустое поле интерпретируется как значение False, которое означает ответ NO (НЕТ). И тогда госпожа Смит могла бы задать своему супругу парочку вопросов по этому поводу.
Для использования значений полей NULL в поле любого типа необходимо выполнить две операции. Во-первых, в окне Command или в программе необходимо выполнить команду SET NULL ON. Во-вторых, необходимо модифицировать структуру и щелкнуть на кнопке NULL для каждого поля, которое допускает нулевые значения. Если этого не сделать, то при добавлении записей с помощью команд APPEND FROM или INSERT SQL FoxPro выдаст ошибку и не присвоит значения этим полям. После установки SET NULL ON и разрешения (вручную) ввода NULL-значений для нужных полей ранее созданной и заполненной таблицы - FoxPro заносит лексему .NULL. в эти поля, которым разрешено оставаться пустыми и которые не содержат никаких значений.
Если после выполнения команды SET NULL ON не был установлен (в Table Designer) флажок Null для данных полей, FoxPro не станет использовать пустые значения или пробелы в полях первичных или потенциальных (candidate) ключей.
ВНИМАНИЕ! По умолчанию В FoxPro установлено SET NULL OFF, т.е. - не разрешается задание значений NULL. А после принудительного выполнения команды SET NULL ON уже нельзя пройти поле, не введя в него никакой информации, т.е. система заставит внести в поле хотя бы 0, пустую строку, .F. и т.п., в зависимости от типа поля.
Запомните следующие правила использования нулевых значений:
• По умолчанию команда APPEND BLANK не заносит нулевую лексему .NULL. во все поля новой записи таблицы.
• Если поле типа Character модифицируется таким образом, что в нем разрешается хранить значения NULL, пустые поля так и остаются пустыми.
• Если поле типа Numeric модифицируется таким образом, что в нем разрешается хранить значения NULL, поля со значением 0 останутся в неприкосновенности.
• Если поле типа Character модифицируется таким образом, что в нем запрещается хранить значения NULL, это поле заполняется пустой строкой.
• Если поле типа Numeric модифицируется таким образом, что в нем запрещается хранить значения NULL, такое поле заполняется числом 0.
...
Рейтинг: 0 / 0
EMPTY() и значения Numeric
    #32407676
coolkenga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 neznajka
Спасибо.
Пора вам переимновываться в znajka :))
...
Рейтинг: 0 / 0
EMPTY() и значения Numeric
    #32411056
Фотография neznajka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Благодарю за комплимент, уважаемая Coolkenga . Просто этот мульт-герой мне больше всего импонирует. Мне приятно Вам помочь, если что-то знаю. Вы-то мне действительно здорово помогли в случае с чередованием INNER JOIN ... ON. Это мне позволило упростить большую часть моих prg-шников. Большое спасибо.
...
Рейтинг: 0 / 0
22 сообщений из 22, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / EMPTY() и значения Numeric
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]