Текущий архив: 2003.04.03;
Скачать: CL | DM;
Внизсложение полей Найти похожие ветки
← →
oss (2003-03-14 13:03) [0]выполняю запрос
select ( f1 || f2 ) res
from table
если оба поле не NULL, то результат тот что и ожидалось,
но если одно из полей NULL, то и результат тоже NULL.
Подскажите как выути из положения,
как получить в таком случае значение только одного поля ?
спасибо
← →
Alexandr (2003-03-14 13:04) [1]вообще-то это говорит об неправльно спроектированной БД.
← →
zacho (2003-03-14 13:06) [2]Посмотри http://delphi.mastak.ru/cgi-bin/forum.pl?look=1&id=1047565738&n=1
Там обсуждался аналогичный вопрос
← →
stone (2003-03-14 13:13) [3]В MSSQL есть функция IsNull, которая используется для подобных целей. Если в ИБ такой функции нет, можно написать самому.
← →
Anatoly Podgoretsky (2003-03-14 13:21) [4]oss © (14.03.03 13:03)
Чему равна сумма чисел 5 и "Щ", здесь тоже самое string+unknown
Правила оперированя с Unknown определены в SQL 92, рекомендую посмотреть книги Дейта и Мартина, вторая проще для чтения
← →
oss (2003-03-14 13:58) [5]2Anatoly Podgoretsky ©
мне не надо их сумма математическая,
мне надо склеить два поляи они текстовые
разницу между конкатенацией (||) и суммой (+) улавливаете ?
с уважением
← →
Anatoly Podgoretsky (2003-03-14 14:05) [6]Улавливаю, ну и что, конкатенация есть суть сложение, при том, что разные диалекты позволяют использовать как ||так и +, или только одно из двух.
Складывать/объединять можно только однотипные сущности, ты не можешь объединять string и unкnown
Еще раз смотри спецификацию SQL 92 прежде чем опровергать.
← →
Anatoly Podgoretsky (2003-03-14 14:07) [7]Там описаны все четыре варианта
тип+тип
тип+null
null+тип
null+null
вместо плюс любое отношение
← →
Wolf (2003-03-14 14:25) [8]Создать 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"
Страницы: 1 вся ветка
Текущий архив: 2003.04.03;
Скачать: CL | DM;
Память: 0.46 MB
Время: 0.008 c