|
Перебор дат в запросе | ☑ | ||
---|---|---|---|---|
0
demkonst
19.11.13
✎
18:02
|
Здравствуйте.
Есть &НачалоПериода и &КонецПериода. Как запросом получить таблицу месяцев между этими двумя датами? Например &НачалоПериода = Январь 2013, &КонецПериода = Апрель 2013. Таблица которую надо получить: Январь 2013 Февраль 2013 Март 2013 Апрель 2013 Спасибо. |
|||
1
Wobland
19.11.13
✎
18:03
|
какого типа у нас сегодня месяц?
|
|||
2
demkonst
19.11.13
✎
18:04
|
Тип дата.
|
|||
3
Wobland
19.11.13
✎
18:05
|
впрочем, собирай в цикле
|
|||
4
demkonst
19.11.13
✎
18:06
|
(3) нельзя в цикле :( давно бы сделал
|
|||
5
Wobland
19.11.13
✎
18:06
|
ну или можно взять календарь и сгруппировать по началу месяца
|
|||
6
Kardash
19.11.13
✎
18:07
|
Делаешь новое поле Например называешь "Месяц" с формулой НАЧАЛОПЕРИОДА(Период, Месяц), потом делаешь по нему группировку и при выводе оформляешь как дата только с месяцем и годом
|
|||
7
Wobland
19.11.13
✎
18:08
|
(4) аллах запрещает?
|
|||
8
demkonst
19.11.13
✎
18:09
|
(5)(6) Спасибо, попробую
(7) Задание учебное, на "развитие навыков написания запросов" |
|||
9
User_Agronom
19.11.13
✎
18:13
|
Была подобная задача. Запрос демонически собирал.
|
|||
10
Wobland
19.11.13
✎
18:13
|
а вот я чот подвис на 35м..
В таблице Product найти модели, которые состоят только из цифр или только из латинских букв (A-Z, без учета регистра). //поле product.model - строка хрен знает какой длины ©http://sql-ex.ru есть мысли у кого-то? |
|||
11
Kardash
19.11.13
✎
18:15
|
(10) на ум приходят только регулярные выражения, но их нельзя в запросе использовать, вроде...
|
|||
12
rphosts
19.11.13
✎
18:16
|
(10) для условия Like задач с самый раз.
|
|||
13
Wobland
19.11.13
✎
18:16
|
(11) тут лайком вроде как надо. но ничего кроме
like [0-9] or like [0-9][0-9] ... на ум не приходит |
|||
14
Wobland
19.11.13
✎
18:18
|
лайку можно задать произвольное число повторений? //ну типа звезды
|
|||
15
rphosts
19.11.13
✎
18:18
|
(14) дык вроде можно
|
|||
16
Wobland
19.11.13
✎
18:20
|
(15) не вижу
|
|||
17
rphosts
19.11.13
✎
18:23
|
(0) если тупо(в голову по другому ничего не пиходит) то можно так: в запросе 1 пакетного запроса отбираем некий набор чисел, в запросе 2 получаем из чисел: ДОБАВИТЬКДАТЕ(ДатаНачала, "Месяц", ЧислоИзЗапроса1) с условие что это поле <= ДатаОкончания
|
|||
18
rphosts
19.11.13
✎
18:23
|
(16) конкретизируй что нужно-то
|
|||
19
Wobland
19.11.13
✎
18:25
|
(18) как применить лайк для решения (10)? какую строку сравнения дать?
|
|||
20
zakidonoff
19.11.13
✎
18:26
|
(10)
where CHARINDEX(Product."model", '0') = 1 OR CHARINDEX(Product."model", '1') = 1 OR CHARINDEX(Product."model", '2') = 1 OR CHARINDEX(Product."model", '3') = 1 OR CHARINDEX(Product."model", '4') = 1 OR CHARINDEX(Product."model", '5') = 1 OR и т.д. |
|||
21
Kardash
19.11.13
✎
18:26
|
(19) Не Подобно(%[0-9]%) - не содержит цифр
И Не Подобно(% %) - не содержит пробели И Не Подобно(%а-я%) Результат - только с анг. символами букв |
|||
22
Wobland
19.11.13
✎
18:27
|
select model, type
from product where model not like '%[^0-9]%' or model not like '%[^a-z]%' уже сам, всем спасибо |
|||
23
rphosts
19.11.13
✎
18:31
|
согласно СП:
Оператор ПОДОБНО позволяет сравнить значение выражения, указанного слева от него, со строкой шаблона, указанной справа. Значение выражения должно иметь тип строка. Если значение выражения удовлетворяет шаблону – результатом оператора будет ИСТИНА, иначе – ЛОЖЬ. Следующие символы в строке шаблона являются служебными и имеют смысл, отличный от символа строки: % (процент): последовательность, содержащая любое количество произвольных символов _ (подчеркивание): один произвольный символ […] (в квадратных скобках один или несколько символов): любой одиночный символ из перечисленных внутри квадратных скобок В перечислении могут встречаться диапазоны, например a-z, означающие произвольный символ, входящий в диапазон, включая концы диапазона. [^…] (в квадратных скобках значок отрицания, за которым следует один или несколько символов): любой одиночный символ, кроме тех, которые перечислены следом за значком отрицания Любой другой символ означает сам себя и не несет никакой дополнительной нагрузки. Если в качестве самого себя необходимо записать один из перечисленных символов, то ему должен предшествовать <Спецсимвол>. Сам <Спецсимвол> (любой подходящий символ) определяется в этом же операторе после ключевого слова СПЕЦСИМВОЛ. Например, шаблон “%АБВ[0-9][абвг]\_абв%” СПЕЦСИМВОЛ “\” означает подстроку, состоящую из последовательности символов: буквы А; буквы Б; буквы В; одной цифры; одной из букв а, б, в или г; символа подчеркивания; буквы а; буквы б; буквы в. (22) угу, так красивее чем (21) |
|||
24
Wobland
19.11.13
✎
18:32
|
(21) а не сработало
select model, type from product where model not like '%[0-9]%' or model not like '%[a-z]%' |
|||
25
Kardash
19.11.13
✎
18:35
|
(24) может платформа старая с глюком?))) в документации пишет что должно сработать...))
|
|||
26
Wobland
19.11.13
✎
18:36
|
(24) "яя00яя" - истина в обоих лайках (плюс НЕ)
|
|||
27
Kardash
19.11.13
✎
18:45
|
ВЫБРАТЬ
БиологическиеАктивы.Наименование ИЗ Справочник.БиологическиеАктивы КАК БиологическиеАктивы ГДЕ (НЕ БиологическиеАктивы.Наименование ПОДОБНО "%[а-я]%" И НЕ БиологическиеАктивы.Наименование ПОДОБНО "%[А-Я]%" И НЕ БиологическиеАктивы.Наименование ПОДОБНО "%[А-Я]%" И НЕ БиологическиеАктивы.Наименование ПОДОБНО "%[0-9]%" ИЛИ НЕ БиологическиеАктивы.Наименование ПОДОБНО "%[а-я]%" И НЕ БиологическиеАктивы.Наименование ПОДОБНО "%[А-Я]%" И НЕ БиологическиеАктивы.Наименование ПОДОБНО "%[A-Z]%" И НЕ БиологическиеАктивы.Наименование ПОДОБНО "%[a-z]%") |
|||
28
Kardash
19.11.13
✎
18:45
|
Ой сверху одна строчка лишняя:
И НЕ БиологическиеАктивы.Наименование ПОДОБНО "%[А-Я]%" |
|||
29
Wobland
19.11.13
✎
18:51
|
1С такая 1С..
выбрать ссылка из справочник.номенклатура где родитель=значение(справочник.номенклатура.пустаяссылка) //чтобы не было много и (наименование не подобно "%^[а-я]%" или наименование не подобно "%^[0-9]%") ==== Ссылка Пища Прочее _создано на сайте яя00яя 00яя яя00 00 яя |
|||
30
Wobland
19.11.13
✎
18:52
|
надо на sqlе проверить
|
|||
31
azernot
19.11.13
✎
18:56
|
(0) Текст запроса не зависящий от состава конфигурации (ограничение - до ~2740 лет в периоде).
ВЫБРАТЬ 1 КАК Разряд ПОМЕСТИТЬ Цифры ОБЪЕДИНИТЬ ВЫБРАТЬ 2 ОБЪЕДИНИТЬ ВЫБРАТЬ 3 ОБЪЕДИНИТЬ ВЫБРАТЬ 4 ОБЪЕДИНИТЬ ВЫБРАТЬ 5 ОБЪЕДИНИТЬ ВЫБРАТЬ 6 ОБЪЕДИНИТЬ ВЫБРАТЬ 7 ОБЪЕДИНИТЬ ВЫБРАТЬ 8 ОБЪЕДИНИТЬ ВЫБРАТЬ 9 ОБЪЕДИНИТЬ ВЫБРАТЬ 0 ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ДОБАВИТЬКДАТЕ(&НачалоПериода, ДЕНЬ, Числа.Число) КАК ДатаДень ПОМЕСТИТЬ Даты ИЗ (ВЫБРАТЬ Единицы.Разряд + ЕСТЬNULL(Десятки.Разряд, 0) * 10 + ЕСТЬNULL(Сотни.Разряд, 0) * 100 + ЕСТЬNULL(Тысячи.Разряд, 0) * 1000 + ЕСТЬNULL(ДесяткиТысяч.Разряд, 0) * 10000 + ЕСТЬNULL(СотниТысяч.Разряд, 0) * 100000 КАК Число ИЗ Цифры КАК Единицы ЛЕВОЕ СОЕДИНЕНИЕ Цифры КАК Сотни ПО (РАЗНОСТЬДАТ(&НачалоПериода, &КонецПериода, ДЕНЬ) >= 100) ЛЕВОЕ СОЕДИНЕНИЕ Цифры КАК Десятки ПО (РАЗНОСТЬДАТ(&НачалоПериода, &КонецПериода, ДЕНЬ) >= 10) ЛЕВОЕ СОЕДИНЕНИЕ Цифры КАК Тысячи ПО (РАЗНОСТЬДАТ(&НачалоПериода, &КонецПериода, ДЕНЬ) >= 1000) ЛЕВОЕ СОЕДИНЕНИЕ Цифры КАК ДесяткиТысяч ПО (РАЗНОСТЬДАТ(&НачалоПериода, &КонецПериода, ДЕНЬ) >= 10000) ЛЕВОЕ СОЕДИНЕНИЕ Цифры КАК СотниТысяч ПО (РАЗНОСТЬДАТ(&НачалоПериода, &КонецПериода, ДЕНЬ) >= 100000)) КАК Числа ГДЕ Числа.Число <= РАЗНОСТЬДАТ(&НачалоПериода, &КонецПериода, ДЕНЬ) ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ РАЗЛИЧНЫЕ НАЧАЛОПЕРИОДА(Даты.ДатаДень, МЕСЯЦ) КАК Месяц ИЗ Даты КАК Даты |
|||
32
Wobland
19.11.13
✎
19:03
|
забавно
говорит 00 яя яя00яя а на сайте такой ответ принят |
|||
33
Wobland
19.11.13
✎
19:04
|
(32) а крыжик надо в скобки ;)
|
|||
34
demkonst
19.11.13
✎
19:12
|
(31) Спасибо! =) пока не работает, но я разберусь
|
|||
35
romix
19.11.13
✎
22:36
|
Можно создать регистр Календарь, в него заносить различные даты (например, за период отчета), и с ним уже все соединять.
|
|||
36
romix
19.11.13
✎
22:38
|
В конкретном примере - еще один регистр КалендарьМесяцы. :-)
|
|||
37
wms
19.11.13
✎
23:03
|
ВЫБРАТЬ ДОБАВИТЬКДАТЕ(&НачалоПериода, ДЕНЬ, aa.a * 1000 + bb.b * 100 + cc.c * 10 + dd.d) КАК Период {ВЫБРАТЬ Период} ИЗ (ВЫБРАТЬ 0 КАК a ОБЪЕДИНИТЬ ВЫБРАТЬ 1 ОБЪЕДИНИТЬ ВЫБРАТЬ 2 ОБЪЕДИНИТЬ ВЫБРАТЬ 3 ОБЪЕДИНИТЬ ВЫБРАТЬ 4 ОБЪЕДИНИТЬ ВЫБРАТЬ 5 ОБЪЕДИНИТЬ ВЫБРАТЬ 6 ОБЪЕДИНИТЬ ВЫБРАТЬ 7 ОБЪЕДИНИТЬ ВЫБРАТЬ 8 ОБЪЕДИНИТЬ ВЫБРАТЬ 9) КАК aa ПОЛНОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ 0 КАК b ОБЪЕДИНИТЬ ВЫБРАТЬ 1 ОБЪЕДИНИТЬ ВЫБРАТЬ 2 ОБЪЕДИНИТЬ ВЫБРАТЬ 3 ОБЪЕДИНИТЬ ВЫБРАТЬ 4 ОБЪЕДИНИТЬ ВЫБРАТЬ 5 ОБЪЕДИНИТЬ ВЫБРАТЬ 6 ОБЪЕДИНИТЬ ВЫБРАТЬ 7 ОБЪЕДИНИТЬ ВЫБРАТЬ 8 ОБЪЕДИНИТЬ ВЫБРАТЬ 9) КАК bb ПО (ИСТИНА) ПОЛНОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ 0 КАК c ОБЪЕДИНИТЬ ВЫБРАТЬ 1 ОБЪЕДИНИТЬ ВЫБРАТЬ 2 ОБЪЕДИНИТЬ ВЫБРАТЬ 3 ОБЪЕДИНИТЬ ВЫБРАТЬ 4 ОБЪЕДИНИТЬ ВЫБРАТЬ 5 ОБЪЕДИНИТЬ ВЫБРАТЬ 6 ОБЪЕДИНИТЬ ВЫБРАТЬ 7 ОБЪЕДИНИТЬ ВЫБРАТЬ 8 ОБЪЕДИНИТЬ ВЫБРАТЬ 9) КАК cc ПО (ИСТИНА) ПОЛНОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ 0 КАК d ОБЪЕДИНИТЬ ВЫБРАТЬ 1 ОБЪЕДИНИТЬ ВЫБРАТЬ 2 ОБЪЕДИНИТЬ ВЫБРАТЬ 3 ОБЪЕДИНИТЬ ВЫБРАТЬ 4 ОБЪЕДИНИТЬ ВЫБРАТЬ 5 ОБЪЕДИНИТЬ ВЫБРАТЬ 6 ОБЪЕДИНИТЬ ВЫБРАТЬ 7 ОБЪЕДИНИТЬ ВЫБРАТЬ 8 ОБЪЕДИНИТЬ ВЫБРАТЬ 9) КАК dd ПО (ИСТИНА) ГДЕ aa.a * 1000 + bb.b * 100 + cc.c * 10 + dd.d <= РАЗНОСТЬДАТ(&НачалоПериода, &КонецПериода, ДЕНЬ)
|
|||
38
rphosts
20.11.13
✎
03:15
|
(31) разве в запросе в операциях с датами параметр "Период" не нужно брать в кавычки?
|
|||
39
rphosts
20.11.13
✎
03:21
|
(32) или только цифры или только англ. буквы, может тогда так:
пз.стр подобно "%^[0-9]%" или пз.стр подобно "%^[A-Za-z]%" |
|||
40
rphosts
20.11.13
✎
03:22
|
+ (38) хотя нет, без кавычек
|
|||
41
rphosts
20.11.13
✎
03:48
|
(31) один шаг лишний. Проще сделать как тут: http://infostart.ru/public/158617/
заменив День на месяц и дописав условие ГДЕ до конца <= &КонецПериода |
|||
42
WildSery
20.11.13
✎
09:52
|
(37) возьмите Календарь, не стирайте пальцы.
|
|||
43
Sabbath
20.11.13
✎
09:56
|
(27) БиологическиеАктивы - круто)
|
|||
44
xantimans
20.11.13
✎
10:07
|
(0)
ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ НАЧАЛОПЕРИОДА(РегламентированныйПроизводственныйКалендарь.ДатаКалендаря, МЕСЯЦ) КАК ПериодРегистрации ПОМЕСТИТЬ Периоды ИЗ РегистрСведений.РегламентированныйПроизводственныйКалендарь КАК РегламентированныйПроизводственныйКалендарь ГДЕ РегламентированныйПроизводственныйКалендарь.ДатаКалендаря МЕЖДУ &НачалоПериода И &КонецПериода |
|||
45
azernot
20.11.13
✎
10:37
|
(41) Согласен.
Я просто в одном примере и сразу описал как получить: а) Ряд натуральных чисел б) Перечень всех дат заданного периода в) Перечень первых дней месяцев заданного периода. |
|||
46
wms
20.11.13
✎
13:45
|
(42)Зачем? А если его нет создавать в пофигураторе? зачем если (37)работает. не мое. но отл. вещь, использую
|
|||
47
wms
20.11.13
✎
13:46
|
вставьте в консоль и проверьте :-)
|
|||
48
WildSery
20.11.13
✎
16:15
|
(46) Календарь - это незаменимая вещь, и да, его стоит создать.
Я рад за вас, что вы освоили такой метод. Но это примитив, и кроме того, вы заранее знаете, сколько разрядов потребуется? Да-да, можно с запасом, но ... зачем? |
|||
49
wms
20.11.13
✎
17:20
|
(48)базовы конф не существует? внешние отчеты создавать например или типовые все с поддержки снимать потому что "Календарь - это незаменимая вещь" ? смешно.
я не парюсь, работает и отлично. скопировал в шаблон и применяю. горько что такую простую вещь 1с в запросе не предусмотрело штатно |
|||
50
WildSery
21.11.13
✎
11:19
|
(49) Не вижу связи между календарём и необходимостью снимать что-то с поддержки. Что "внешние отчёты"? Выражайте мысль яснее, я ничего не понял.
Какую "простую вещь" не предусмотрели в 1с? Если речь о ряде натуральных чисел, то их "штатно" нет ни в одной известной мне системе. |
|||
51
wms
21.11.13
✎
17:02
|
(50)тока увидел стаж 1 мес.
мож ты еще по 7.7 ? |
|||
52
WildSery
22.11.13
✎
13:59
|
(51) 7.7, когда она появилась, я посмотрел и она не понравилась. Никогда не занимался. 1С заинтересовался повторно, только когда появился тонкий клиент.
Ты стажем на этом форуме собираешься меряться или таки ответишь на вопрос? |
|||
53
wms
22.11.13
✎
17:21
|
(52)какой вопрос сформулируй правильно и на мой ответь про "базовых конфигураций не существует? "и как ты туда календарь добавишь?
ну и что под календарем ты имеешь ввиду, раз в 8-ке т.к. это понятие из 7.7 в 8-ке нет такого объекта, что вместо него используется? я то знаю, а ВЫ? |
|||
54
wms
22.11.13
✎
17:23
|
смыл прост, навига менять конфигурацию, даже если она проф, хотя бывает и не профф, если можно штатно получить в запросе перебор дат за период ?
|
|||
55
wms
22.11.13
✎
17:26
|
я просто часто в прошлом сталкивался отчет вдруг перестает работать, пользователю срочно надо, лезу в код там период из добавленного предыдущим прогом регистра сведения берется а его не заполнили и никто не знает что надо заполнять ....
а если в штате нет прога? |
|||
56
WildSery
22.11.13
✎
17:46
|
(53) Перечитайте (50), там три вопроса, первый скорее утверждение, потому без знака "?"
"базовых конфигураций не существует"? - существуют, я сам написал полторы. "как ты туда календарь добавишь"? - я вставил методом копи-паста из типовой, убрал лишнее. Если сейчас будешь доказывать, что регламентированный производственный календарь нельзя назвать календарём, или это не совсем календарь, я огорчусь. (54) Потому что вставлять этот костылик в каждый запрос трудозатратно и неэффективно. (55) Что тут можно сказать? Пользуйся типовым функционалом! |
|||
57
EvgeniuXP
22.11.13
✎
23:00
|
(0) см. остатки на каждый день - поиском - там сказано и показано, как формировать таблицу из чисел и прибавлять к начале дате до конца даты и получишь месяц.
|
|||
58
EvgeniuXP
22.11.13
✎
23:01
|
(0) а еще оригинальнее поискать ответ, как в запросе из строки сделать число :)
|
|||
59
grayshadow
23.11.13
✎
01:15
|
просто любопытно, а что за типовая конфа без календаря?
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |