![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
сложение полей [D7, IB6.x]
oss © (2003-03-14 13:03:00)выполняю запрос
select ( f1 || f2 ) res
from table
если оба поле не NULL, то результат тот что и ожидалось,
но если одно из полей NULL, то и результат тоже NULL.
Подскажите как выути из положения,
как получить в таком случае значение только одного поля ?
спасибо
Wolf (2003-03-14 14:25:00) [1]Создать UDF, NullToStr
далее NullToStr(f1)||NullToStr(f2)
юнит.
library myUDF;
uses
SysUtils,
Classes;
{$R *.RES}
function malloc(Size: Integer): PChar; cdecl; external "msvcrt.dll";
function NullToStr(str: PCHAR):PCHAR; cdecl; export;
var
S: string;
memall: PChar;
begin
if (str = nil) then begin
S := " "
end else begin
S := str;
end;
memall := PCHAR(s);
Result := malloc(256);
StrCopy(Result, memall);
end;
exports NullToStr;
end.
Объявлние ф-ии
DECLARE EXTERNAL FUNCTION NULLTOSTR
CSTRING(255)
RETURNS CSTRING(255) FREE_IT
ENTRY_POINT "NullToStr" MODULE_NAME "MYUDF"
Anatoly Podgoretsky (2003-03-14 14:07:00) [2]Там описаны все четыре варианта
тип+тип
тип+null
null+тип
null+null
вместо плюс любое отношение
Anatoly Podgoretsky (2003-03-14 14:05:00) [3]Улавливаю, ну и что, конкатенация есть суть сложение, при том, что разные диалекты позволяют использовать как ||так и +, или только одно из двух.
Складывать/объединять можно только однотипные сущности, ты не можешь объединять string и unкnown
Еще раз смотри спецификацию SQL 92 прежде чем опровергать.
oss (2003-03-14 13:58:00) [4]2Anatoly Podgoretsky ©
мне не надо их сумма математическая,
мне надо склеить два поляи они текстовые
разницу между конкатенацией (||) и суммой (+) улавливаете ?
с уважением
Anatoly Podgoretsky (2003-03-14 13:21:00) [5]oss © (14.03.03 13:03)
Чему равна сумма чисел 5 и "Щ", здесь тоже самое string+unknown
Правила оперированя с Unknown определены в SQL 92, рекомендую посмотреть книги Дейта и Мартина, вторая проще для чтения
stone (2003-03-14 13:13:00) [6]В MSSQL есть функция IsNull, которая используется для подобных целей. Если в ИБ такой функции нет, можно написать самому.
zacho (2003-03-14 13:06:00) [7]Посмотри http://delphi.mastak.ru/cgi-bin/forum.pl?look=1&id=1047565738&n=1
Там обсуждался аналогичный вопрос
Alexandr (2003-03-14 13:04:00) [8]вообще-то это говорит об неправльно спроектированной БД.