Добрый день!
Используется СУБД Pervasive.
Пишу условие для запроса по таблице ATTRVAL. Не могу понять, незаполненные строковые значения поля VSTRING - это просто пустая строка ('') или, скажем, null? Если null - как это проверить?
Сейчас я использую условие вида
WHERE
(
ATTRVAL.VSTRING <>''
OR
ATTRVAL2.VSTRING <>''
OR
ATTRVAL3.VSTRING <>''
),
но, кажется, оно работает не совсем так, как я ожидаю.
String и Null
Модераторы: m0p3e, edward_K, Модераторы
-
- Местный житель
- Сообщения: 555
- Зарегистрирован: 17 июл 2012, 11:56
- Откуда: Республика Беларусь, г.Могилев
Re: String и Null
Здравствуйте.
Таблицы Attrnam и Attrval связаны по условию Attrnam.Nrec == Attrval.Cattrnam.
В зависимости от Attrnam.Attrtype (кода типа внешнего атрибута) заполняются соответствующие поля в Attrval: Vstring, Vdouble, Vdate, Vcomp. Причем Vstring заполняется не только для строкового типа атрибута, но и когда тип атрибута — ссылка (в этом случае заполняется и Vcomp).
Таблицы Attrnam и Attrval связаны по условию Attrnam.Nrec == Attrval.Cattrnam.
В зависимости от Attrnam.Attrtype (кода типа внешнего атрибута) заполняются соответствующие поля в Attrval: Vstring, Vdouble, Vdate, Vcomp. Причем Vstring заполняется не только для строкового типа атрибута, но и когда тип атрибута — ссылка (в этом случае заполняется и Vcomp).
Re: String и Null
Спасибо. Я знаю про связку ATTRNAM и ATTRVAL. Меня больше интересовало, есть ли в галактическом SQL понятие null применительно к строчному типу данных.Irina_ писал(а):Здравствуйте.
Таблицы Attrnam и Attrval связаны по условию Attrnam.Nrec == Attrval.Cattrnam.
В зависимости от Attrnam.Attrtype (кода типа внешнего атрибута) заполняются соответствующие поля в Attrval: Vstring, Vdouble, Vdate, Vcomp. Причем Vstring заполняется не только для строкового типа атрибута, но и когда тип атрибута — ссылка (в этом случае заполняется и Vcomp).
Опытным путем установил, что, похоже, нет, и сравнивать надо так, как я и сравниваю: ATTRVAL.VSTRING <> ''
-
- Заслуженный деятель интернет-сообщества
- Сообщения: 5188
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: SPB galaxy spb
Re: String и Null
NULL есть. В запросах на DSQL если запись не валидна, то можно проверить какое то поле на NULL.
Если же запись есть, то значение хоть и пустое тоже будет - смотрите в Studio на MSSQL.
Кроме DSQL надется на Null особо не приходится, поскольку местами подключается встроенный обработчик исключений, а местами нет.
Можете кстати прогнать простеньуий примерчик - что быстрее
if Length(AttrVal.VString)=0
if AttrVal.VString=''
- сдается мне, что первое будет шустрее.
В вашем случае надо быть поаккуратней и возможно использовать if(isValidAll(tnAttrVal),AttrVal.vString<>'',false)
иначе есть шанс нарваться на исключение.
Если же запись есть, то значение хоть и пустое тоже будет - смотрите в Studio на MSSQL.
Кроме DSQL надется на Null особо не приходится, поскольку местами подключается встроенный обработчик исключений, а местами нет.
Можете кстати прогнать простеньуий примерчик - что быстрее
if Length(AttrVal.VString)=0
if AttrVal.VString=''
- сдается мне, что первое будет шустрее.
В вашем случае надо быть поаккуратней и возможно использовать if(isValidAll(tnAttrVal),AttrVal.vString<>'',false)
иначе есть шанс нарваться на исключение.
Re: String и Null
Спасибо, edward_K.edward_K писал(а):NULL есть. В запросах на DSQL если запись не валидна, то можно проверить какое то поле на NULL.
Если же запись есть, то значение хоть и пустое тоже будет - смотрите в Studio на MSSQL.
Кроме DSQL надется на Null особо не приходится, поскольку местами подключается встроенный обработчик исключений, а местами нет.
Можете кстати прогнать простеньуий примерчик - что быстрее
if Length(AttrVal.VString)=0
if AttrVal.VString=''
- сдается мне, что первое будет шустрее.
DSQL мне не подходит, т.к. у меня Pervasive.
А вот Length(AttrVal.VString)=0 - интересная идея, проверю.