v7: 1SQLite: Помогите с запросом? Ругается на скобку... #652097


#0 by Zhuravlik
Злравствуйте. Хочу в запросе получать все даты из периода, и пустые даты. Запрос идет по двум справочникам, "_ТТН_База_ДанныеТТН" подчинен "_ТТН_База_Перевозки". Дата принадлежит подчиненному, т.е. ВЫБРАТЬ ... КОГДА (Проверяю реквизит владельца) И /*у подчиненных*/ ((проходит условие на дату) ИЛИ (есть пустая дата)) И (Проверяю владельца). Пустую дату проверяю по LIKE, если в первом символе нет цифр - значит дата пуста. А тут ругается мне на скобку, уже пооблазил весь код, вроде все правильно, не пойму...            ) GROUP BY Рейсы.Контрагент, Рейсы.ID, Рейсы.Автовоз, Рейсы.Водитель, Рейсы.Маршрут, Рейсы.Путевой_Номер, Рейсы.Путевой_Дата, Рейсы.ДатаУбытия, Рейсы.ДатаПрибытия, Рейсы.Сумма, Рейсы.Километраж, Рейсы.ДанныеТТН ORDER BY Рейсы.ДатаУбытия
#1 by ДенисЧ
(ТТН.ДатаТТН LIKE [!'0123456789']%) мне это подозрительно
#2 by Zhuravlik
Если первый символ не являетсяодним из..., нет?
#3 by Rie
Образец - это строка. А у тебя кавычки несколько не там стоят...
#4 by orefkov
Да, LIKE подозрительный какой-то. Вообще не пойму его.
#5 by Zhuravlik
LIKE - отсюда взял , или в SQLite так нельзя?
#6 by Zhuravlik
+ Next, we want to select the persons with a last name that do not start with "b" or "s" or "p" from the "Persons" table. We use the following SELECT statement: WHERE LastName LIKE '[!bsp]%'
#7 by orefkov
Ты LIKE с регэкспами спутал наверное. Вот на написано: "The operand to the right of the LIKE operator contains the pattern and the left hand operand contains the string to match against the pattern. A percent symbol ("%") in the LIKE pattern matches any sequence of zero or more characters in the string. An underscore ("_") in the LIKE pattern matches any single character in the string. Any other character matches itself or its lower/upper case equivalent (i.e. case-insensitive matching)." Работают только % - любой символ 0 или более раз _ - один любой символ Остальное сравнивается как есть.
#8 by orefkov
И весь паттерн для LIKE должен быть строкой в одинарных кавычках.
#9 by Rie
Посмотри внимательно, как образец LIKE в твоей ссылке записан.
#10 by orefkov
В sqlite есть оператор REGEXP, но он вызывает пользовательскую функцию, которая по-дефолту ничего не ищет. Можно поискать расширение для sqlite, с реализацией REGEXP.
#11 by Rie
Если я правильно понял автора, то LIKE '[^0-9]%' даст искомый результат.
#12 by Zhuravlik
Я уже попробовал вместо <[!'0123456789']> искать <'[!0123456789]'> - запрос ошибок не выдает, но и данных нет) т.е. я сам могу SQLite обновлять? А вообще так проавильно проверять на дату? Долго писал)
#13 by Zhuravlik
А, там еще ^
#14 by Rie
Так а хрен знает, что тебе надо было. Я предполагаю, что человек, пишущий на SQL, предварительно ознакомился с этим языком :-)
#15 by orefkov
Давай завтра попробую сделать.
#16 by Zhuravlik
Ды это я долго писал)))) Ваш вариант аналогичен моему, <'[!0123456789]%'>, но ни с тем ни с другим условие не проходит, в запросе - 0 строк, а пустые даты есть точно, проверил. А как еще можно на пустую дату проверить? Я просто столкнулся еще вот с чем: Когда делаю просто запрос без условия, в результирующую таблицу дата (если пустая) выгружается как "  .  .  ", и условие на пустоеЗначение потом не проходит, я подумал что и в самом запросе будет так же, отсюда взялся LIKE. Может как-то по-другому нужно? Давайте)
#17 by orefkov
На пустую дату в запросе надо проверять так:
#18 by Zhuravlik
Все получилось! Спасибо!)
#19 by Zhuravlik
Теперь не будете REGEXP вставлять?
#20 by orefkov
Почему же, надо будет попробовать. Все равно для 8ки надо 1sqlite надо делать.
#21 by Ёпрст
давно пора
#22 by Zhuravlik
Что-то не то у меня снова... Когда запрос проходит без доп. условия на пустую дату - выводится 25 элементов, с этим уловием - 32. Только в добавленных семи дата непустая, и не входит в период фильтра. Это если я на exists в подчиненном справочнике ищу. А если в одной таблице фильтрую по дате, то все работает как надо. Вот текст из отладки:        WHERE ( (ТТН.ДатаТТН between @НачДата AND @КонДата) OR (ТТН.ДатаТТН = '        ') AND (ТТН.PARENTEXT = Рейсы.ID)        )) GROUP BY Рейсы.Контрагент, Рейсы.ID, Рейсы.Автовоз, Рейсы.Водитель, Рейсы.Маршрут, Рейсы.Путевой_Номер, Рейсы.Путевой_Дата, Рейсы.ДатаУбытия, Рейсы.ДатаПрибытия, Рейсы.Сумма, Рейсы.Километраж, Рейсы.ДанныеТТН ORDER BY Рейсы.ДатаУбытия Где-то в условии у меня косяк?
#23 by Zhuravlik
Кажется понял ((ТТН.ДатаТТН between @НачДата AND @КонДата) OR (ТТН.ДатаТТН = '        ')) AND (ТТН.PARENTEXT = Рейсы.ID)
Тэги: 1С 7.7 и ранее
Ответить:
Комментарии доступны только авторизированным пользователям

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