coalesce
Модераторы: m0p3e, edward_K, Модераторы
coalesce
Подскажите, почему
select schfact.dfact выдаёт дату, а
select coalesce(schfact.dfact,'') какое-то число, хрен знает откуда взятое?
И coalesce(schfact.dfact,0), и coalesce(schfact.dfact,#date(0,0,0000)) тоже выдают это число.
В запросе есть left join, поэтому юзаю coalesce, как же быть в такой ситуации?
select schfact.dfact выдаёт дату, а
select coalesce(schfact.dfact,'') какое-то число, хрен знает откуда взятое?
И coalesce(schfact.dfact,0), и coalesce(schfact.dfact,#date(0,0,0000)) тоже выдают это число.
В запросе есть left join, поэтому юзаю coalesce, как же быть в такой ситуации?
Re: coalesce
В MS SQL "галактическая" дата хранится в виде числа: '2014-10-07' => '7DE-0A-07' => 7DE0A07 => 131992071. Надо преобразовывать!
Re: coalesce
Во дела! А как преобразовывать?
-
- Заслуженный деятель интернет-сообщества
- Сообщения: 5188
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: SPB galaxy spb
Re: coalesce
#date(0,0,0000) плохо пашет. Попробуйте #date(1,1,1900). А вообще да - с пустыми датами есть проблема
Re: coalesce
#date(1,1,1900) тоже число выдаёт
-
- Местный житель
- Сообщения: 1844
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
- Контактная информация:
Re: coalesce
Вам это запрос нужен чисто аналитический в саппорт/sql ?
Re: coalesce
Нет, в vip-е пишу программу с этим запросомDen писал(а):Вам это запрос нужен чисто аналитический в саппорт/sql ?
Re: coalesce
Тогда выведенное значение обработайте какой-нибудь функцией преобразования. Например...novichok писал(а):Нет, в vip-е пишу программу с этим запросомDen писал(а):Вам это запрос нужен чисто аналитический в саппорт/sql ?
-
- Местный житель
- Сообщения: 1844
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
- Контактная информация:
Re: coalesce
У меня код :
кажет то даты намано высчитываются из накладных.
а вот если запустить сей dsql запрос из саппорт/sql то да - выводится как описано топикстартером.
Код: Выделить всё
Interface ljoin;
table struct tempdate
(
baseddoc :date
,nodoc :string[20]
,soprddoc :date
)
;
create view
from tempdate
;
HandleEvent
Cminit:{
sql select basedoc.ddoc as baseddoc
,basedoc.nodoc as nodoc
,coalesce(katsopr.dsopr,#date(0,0,0)) as soprddoc
from basedoc inner join stepdoc on basedoc.nrec=stepdoc.cbasedoc and basedoc.viddoc=201
left join katsopr on stepdoc.nrec=katsopr.cstepdoc
into tempdate byname;
_loop tempdate
logstrtofile('c:\debug\123.txt',tempdate.baseddoc+'----'+tempdate.nodoc+'----'+tempdate.soprddoc);
}
end;
end.
а вот если запустить сей dsql запрос из саппорт/sql то да - выводится как описано топикстартером.
Re: coalesce
Вот такой у меня запрос глючит:
Буду по совету RAJAH преобразовывать перед выводом в excel.
Код: Выделить всё
stmt := sqlAllocStmt;
sqlAddStr(query,'select katorg.name,grsopr.nsopr,grsopr.dsopr,katsopr.nsopr,katsopr.dsopr,katsopr.summa,katsopr.snalogs,');
sqlAddStr(query,'coalesce(schfact.num,'#39+''#39+'),coalesce(schfact.dfact,'#39+''#39+'),');
sqlAddStr(query,'grsopr.nrec,coalesce(gruzopol.name,'#39+''#39+'),');
sqlAddStr(query,'basedoc.nodoc,basedoc.ddoc,basedoc.total,basedoc.nds,basedoc.nrec,');
sqlAddStr(query,'coalesce(schfact.nrec,0) from grsopr ');
sqlAddStr(query,'inner join katorg on grsopr.corg=katorg.nrec ');
sqlAddStr(query,'left join katorg gruzopol on grsopr.cgruzto=gruzopol.nrec ');
sqlAddStr(query,'inner join katsopr on katsopr.cgrsopr=grsopr.nrec ');
sqlAddStr(query,'left join schfact on katsopr.cschfact=schfact.nrec ');
sqlAddStr(query,'inner join stepdoc on katsopr.cstepdoc=stepdoc.nrec inner join basedoc on stepdoc.cbasedoc=basedoc.nrec ');
sqlAddStr(query,'where grsopr.vidsopr=201 and katsopr.vidsopr=201 and katsopr.wadoc=0 ');
sqlAddStr(query,'and (grsopr.dsopr between #date('+day(d_n)+','+month(d_n)+','+year(d_n)+') and #date('+day(d_k)+','+month(d_k)+','+year(d_k)+')) ');
sqlAddStr(query,'order by katorg.name,coalesce(gruzopol.name,'#39+''#39+'),grsopr.dsopr,grsopr.nsopr,basedoc.ddoc,basedoc.nodoc,katsopr.dsopr,katsopr.nsopr');
k_osh:=sqlPrepare(stmt,query);
-
- Местный житель
- Сообщения: 1844
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
- Контактная информация:
Re: coalesce
Код: Выделить всё
Interface ljoin;
table struct tempdate
(
baseddoc :date
,nodoc :string[20]
,soprddoc :date
)
;
create view
var query,stmt :longint;
from tempdate
;
HandleEvent
Cminit:{
stmt := sqlAllocStmt;
sqlAddStr(query, ' select basedoc.ddoc as baseddoc');
sqlAddStr(query, ' ,basedoc.nodoc as nodoc');
sqlAddStr(query, ' ,coalesce(katsopr.dsopr,#date(0,0,0)) as soprddoc');
sqlAddStr(query, ' from basedoc inner join stepdoc on basedoc.nrec=stepdoc.cbasedoc and basedoc.viddoc=201');
sqlAddStr(query, ' left join katsopr on stepdoc.nrec=katsopr.cstepdoc');
sqlPrepare(stmt,query);
sqlExecute(stmt);
if (sqlFetchInto(stmt,#tempdate) != tsOk)
Message('неудача :(');
sqlFreeStmt(stmt);
_loop tempdate
logstrtofile('c:\debug\123.txt',tempdate.baseddoc+'----'+tempdate.nodoc+'----'+tempdate.soprddoc);
}
end;
end.