Имя: Пароль:
1C
1С v8
Преобразование строки в дату в запросе
0 radiks
 
30.11.11
19:24
Подскажите как преобразовать в запросе строку вида "20111005ПРТТ" преобразовать в дату?
1 МихаилМ
 
30.11.11
19:26
2 aleks-id
 
30.11.11
19:27
стандартно спрошу - а зачем?
3 radiks
 
30.11.11
20:07
(2? В общем нужно из внешнего источника затянуть данные в заданном интервале дат. Дата там в таком формате. Т.е. чтобы не тянуть за весь период данные из внешнего источника, нужно отобрать в запросе.
4 radiks
 
30.11.11
20:08
(1) Не то.
5 Aleksey
 
30.11.11
20:09
(3) Дата в нормальном виде, осталось период преобразовать в строку и сравнивать строки. Необязательно входящие данные преобразовывать
6 aleks-id
 
30.11.11
20:09
ну и тяни по этим условиям. такой формат позволяет сравнивать на больше-меньше
7 radiks
 
30.11.11
20:18
а как все-таки отсечь текст и оставшееся сравнить?
я попытался ВЫРАЗИТЬ(ПОДСТРОКА(..., 0, 8) КАК Дата) - ошибка
8 PR
 
30.11.11
20:20
В запросе нельзя преобразовать строку в дату.
ВЫРАЗИТЬ - это приведение к типу.
9 Aleksey
 
30.11.11
20:20
(7) А зачем отсекать. 000 гарантированно больше чем буква
т.е. 201110050000<20111005ПРТТ<201110060000
10 Armando
 
30.11.11
20:21
Через  ДАТАВРЕМЯ и ПОДСТРОКА не?
11 PR
 
30.11.11
20:22
(10) Что через ДАТАВРЕМЯ?
12 radiks
 
30.11.11
20:29
(10) пробовал - нет
13 Живой Ископаемый
 
30.11.11
20:31
2(10,12) до вас пробовали over 9000 и писали об этом...
14 andrewks
 
30.11.11
20:31
можно, через временную таблицу. только верно было замечено - нахненадо
15 radiks
 
30.11.11
20:42
(14) нужно именно в запросе. Понятно, что можно затянуть все и потом обычным Формат, но нужно в запросе
16 Vakhrin
 
30.11.11
20:42
ответ в (6)
17 radiks
 
30.11.11
20:43
(16) понятно, если других вариантов нет, тогда остановлюсь на этом.
всем спасибо
18 andrewks
 
30.11.11
21:02
(15) я про запрос и говорю
19 andrewks
 
30.11.11
21:52
(17)  вот другой вариант:


select
0 as num
,"0" as numstr
into digits
union select 1,"1" union select 2,"2" union select 3,"3" union select 4,"4" union select 5,"5"
union select 6,"6" union select 7,"7" union select 8,"8" union select 9,"9"
index by num,numstr

;

select
digits1.num+10*digits2.num as day
,digits2.numstr+digits1.numstr as daystr
into days
from
digits as digits1
,digits as digits2
where (digits1.num+10*digits2.num between 1 and 31)
index by day,daystr

;

select
digits1.num+10*digits2.num as month
,digits2.numstr+digits1.numstr as monthstr
into months
from
digits as digits1
,digits as digits2
where (digits1.num+10*digits2.num between 1 and 12)
index by month,monthstr

;


select
digits1.num+10*digits2.num+100*digits3.num+1000*digits4.num as year
,digits4.numstr+digits3.numstr+digits2.numstr+digits1.numstr as yearstr
into years
from
digits as digits1
,digits as digits2
,digits as digits3
,digits as digits4
//where (digits1.num+10*digits2.num+100*digits3.num+1000*digits4.num between 1 and 3999)
where (digits1.num+10*digits2.num+100*digits3.num+1000*digits4.num between 2000 and 2020)
index by year,yearstr

;

select
dateadd(dateadd(dateadd(datetime(1,1,1),day,days.day-1),month,months.month-1),year,years.year-1) as Дата,
years.yearstr+months.monthstr+days.daystr as ДатаСтрокой
from
years
,months
,days
order by Дата


генерация таблицы дат и их текстовых представлений.
можешь её пихать прямо в запросе в ВТ, и использовать соединение с ней
20 Aleksey
 
30.11.11
21:58
(17) Чукча не читатель?
21 radiks
 
01.12.11
10:44
(19) О, попробуем )))
Есть два вида языков, одни постоянно ругают, а вторыми никто не пользуется.