Страница 1 из 1

String и Null

Добавлено: 25 май 2018, 15:07
Buddy
Добрый день!
Используется СУБД Pervasive.
Пишу условие для запроса по таблице ATTRVAL. Не могу понять, незаполненные строковые значения поля VSTRING - это просто пустая строка ('') или, скажем, null? Если null - как это проверить?
Сейчас я использую условие вида
WHERE
(
ATTRVAL.VSTRING <>''
OR
ATTRVAL2.VSTRING <>''
OR
ATTRVAL3.VSTRING <>''
),
но, кажется, оно работает не совсем так, как я ожидаю.

Re: String и Null

Добавлено: 25 май 2018, 15:56
Irina_
Здравствуйте.
Таблицы Attrnam и Attrval связаны по условию Attrnam.Nrec == Attrval.Cattrnam.
В зависимости от Attrnam.Attrtype (кода типа внешнего атрибута) заполняются соответствующие поля в Attrval: Vstring, Vdouble, Vdate, Vcomp. Причем Vstring заполняется не только для строкового типа атрибута, но и когда тип атрибута — ссылка (в этом случае заполняется и Vcomp).

Re: String и Null

Добавлено: 25 май 2018, 16:06
Buddy
Irina_ писал(а):Здравствуйте.
Таблицы Attrnam и Attrval связаны по условию Attrnam.Nrec == Attrval.Cattrnam.
В зависимости от Attrnam.Attrtype (кода типа внешнего атрибута) заполняются соответствующие поля в Attrval: Vstring, Vdouble, Vdate, Vcomp. Причем Vstring заполняется не только для строкового типа атрибута, но и когда тип атрибута — ссылка (в этом случае заполняется и Vcomp).
Спасибо. Я знаю про связку ATTRNAM и ATTRVAL. Меня больше интересовало, есть ли в галактическом SQL понятие null применительно к строчному типу данных.
Опытным путем установил, что, похоже, нет, и сравнивать надо так, как я и сравниваю: ATTRVAL.VSTRING <> ''

Re: String и Null

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

Re: String и Null

Добавлено: 25 май 2018, 18:18
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 - интересная идея, проверю.