String и Null

Программирование на Атлантисе (VIP, FCOM, ARD), FastReport

Модераторы: m0p3e, edward_K, Модераторы

Ответить
Buddy
Постоянный обитатель
Сообщения: 119
Зарегистрирован: 02 июн 2016, 15:18
Откуда: Галактика СПб

String и Null

Сообщение Buddy »

Добрый день!
Используется СУБД Pervasive.
Пишу условие для запроса по таблице ATTRVAL. Не могу понять, незаполненные строковые значения поля VSTRING - это просто пустая строка ('') или, скажем, null? Если null - как это проверить?
Сейчас я использую условие вида
WHERE
(
ATTRVAL.VSTRING <>''
OR
ATTRVAL2.VSTRING <>''
OR
ATTRVAL3.VSTRING <>''
),
но, кажется, оно работает не совсем так, как я ожидаю.
Irina_
Местный житель
Сообщения: 546
Зарегистрирован: 17 июл 2012, 11:56
Откуда: Республика Беларусь, г.Могилев

Re: String и Null

Сообщение Irina_ »

Здравствуйте.
Таблицы Attrnam и Attrval связаны по условию Attrnam.Nrec == Attrval.Cattrnam.
В зависимости от Attrnam.Attrtype (кода типа внешнего атрибута) заполняются соответствующие поля в Attrval: Vstring, Vdouble, Vdate, Vcomp. Причем Vstring заполняется не только для строкового типа атрибута, но и когда тип атрибута — ссылка (в этом случае заполняется и Vcomp).
Buddy
Постоянный обитатель
Сообщения: 119
Зарегистрирован: 02 июн 2016, 15:18
Откуда: Галактика СПб

Re: String и Null

Сообщение Buddy »

Irina_ писал(а):Здравствуйте.
Таблицы Attrnam и Attrval связаны по условию Attrnam.Nrec == Attrval.Cattrnam.
В зависимости от Attrnam.Attrtype (кода типа внешнего атрибута) заполняются соответствующие поля в Attrval: Vstring, Vdouble, Vdate, Vcomp. Причем Vstring заполняется не только для строкового типа атрибута, но и когда тип атрибута — ссылка (в этом случае заполняется и Vcomp).
Спасибо. Я знаю про связку ATTRNAM и ATTRVAL. Меня больше интересовало, есть ли в галактическом SQL понятие null применительно к строчному типу данных.
Опытным путем установил, что, похоже, нет, и сравнивать надо так, как я и сравниваю: ATTRVAL.VSTRING <> ''
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5184
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Re: String и Null

Сообщение edward_K »

NULL есть. В запросах на DSQL если запись не валидна, то можно проверить какое то поле на NULL.
Если же запись есть, то значение хоть и пустое тоже будет - смотрите в Studio на MSSQL.
Кроме DSQL надется на Null особо не приходится, поскольку местами подключается встроенный обработчик исключений, а местами нет.
Можете кстати прогнать простеньуий примерчик - что быстрее
if Length(AttrVal.VString)=0
if AttrVal.VString=''
- сдается мне, что первое будет шустрее.
В вашем случае надо быть поаккуратней и возможно использовать if(isValidAll(tnAttrVal),AttrVal.vString<>'',false)
иначе есть шанс нарваться на исключение.
Buddy
Постоянный обитатель
Сообщения: 119
Зарегистрирован: 02 июн 2016, 15:18
Откуда: Галактика СПб

Re: String и Null

Сообщение Buddy »

edward_K писал(а):NULL есть. В запросах на DSQL если запись не валидна, то можно проверить какое то поле на NULL.
Если же запись есть, то значение хоть и пустое тоже будет - смотрите в Studio на MSSQL.
Кроме DSQL надется на Null особо не приходится, поскольку местами подключается встроенный обработчик исключений, а местами нет.
Можете кстати прогнать простеньуий примерчик - что быстрее
if Length(AttrVal.VString)=0
if AttrVal.VString=''
- сдается мне, что первое будет шустрее.
Спасибо, edward_K.
DSQL мне не подходит, т.к. у меня Pervasive.
А вот Length(AttrVal.VString)=0 - интересная идея, проверю.
Ответить