Преобразование строки в дату в запросе #582890


#0 by radiks
Подскажите как преобразовать в запросе строку вида "20111005ПРТТ" преобразовать в дату?
#1 by МихаилМ
#2 by aleks-id
стандартно спрошу - а зачем?
#3 by radiks
(2? В общем нужно из внешнего источника затянуть данные в заданном интервале дат. Дата там в таком формате. Т.е. чтобы не тянуть за весь период данные из внешнего источника, нужно отобрать в запросе.
#4 by radiks
Не то.
#5 by Aleksey
Дата в нормальном виде, осталось период преобразовать в строку и сравнивать строки. Необязательно входящие данные преобразовывать
#6 by aleks-id
ну и тяни по этим условиям. такой формат позволяет сравнивать на больше-меньше
#7 by radiks
а как все-таки отсечь текст и оставшееся сравнить? я попытался ВЫРАЗИТЬ(ПОДСТРОКА(..., 0, 8) КАК Дата) - ошибка
#8 by PR
В запросе нельзя преобразовать строку в дату. ВЫРАЗИТЬ - это приведение к типу.
#9 by Aleksey
А зачем отсекать. 000 гарантированно больше чем буква т.е. 201110050000<20111005ПРТТ<201110060000
#10 by Armando
Через  ДАТАВРЕМЯ и ПОДСТРОКА не?
#11 by PR
Что через ДАТАВРЕМЯ?
#12 by radiks
пробовал - нет
#13 by Живой Ископаемый
2(10,12) до вас пробовали over 9000 и писали об этом...
#14 by andrewks
можно, через временную таблицу. только верно было замечено - нахненадо
#15 by radiks
нужно именно в запросе. Понятно, что можно затянуть все и потом обычным Формат, но нужно в запросе
#16 by Vakhrin
ответ в
#17 by radiks
понятно, если других вариантов нет, тогда остановлюсь на этом.
#18 by andrewks
я про запрос и говорю
#19 by andrewks
вот другой вариант: 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 ; 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 by Aleksey
Чукча не читатель?
#21 by radiks
О, попробуем )))
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С