Переключение на Главную Страницу Страницы: 1 ... 56 57 [58] 59 60 ... 79 ОтправитьПечать
Очень популярная тема (более 25 ответов) 1sqlite (число прочтений - 456688 )
leov-001
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 150
Зарегистрирован: 05. Марта 2009
Re: 1sqlite
Ответ #855 - 30. Ноября 2016 :: 06:06
Печать  
Код (SQL)
Выбрать все
select 'r   123'*1 -- Получаем 0 или NULL не понятно
select '   123'*1 -- Получаем 123
 

  
Наверх
 
IP записан
 
leov-001
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 150
Зарегистрирован: 05. Марта 2009
Re: 1sqlite
Ответ #856 - 30. Ноября 2016 :: 06:08
Печать  
Djelf писал(а) 29. Ноября 2016 :: 19:02:
Grey77 писал(а) 29. Ноября 2016 :: 14:38:
Добрый день. Снова нужна помощь.
Подскажите как в запросе сделать проверку, что значение реквизита "Число"?
Есть у справочника номенклатура реквизит КодыПоставщика - тип строка (80) символов. Нужно отобрать все товары, в которых строка "КодыПоставщика" состоит только из цифр.

Штатно можно, но перебирать все лишние символы в case слишком громоздко. Остальные варианты при возможной длине числа в 80 символов не надежны (будет переполнение).
Можно еще попробовать upper(Перем)=lower(Перем) + фильр на спец символы...

Проще нарисовать функцию-расширение на си...


https://github.com/eatnumber1/sqlite-regexp
  
Наверх
 
IP записан
 
Djelf
God Member
*****
Отсутствует


Ubuntu + wine@etersoft
+ 1C 7.7

Сообщений: 631
Местоположение: Питер
Зарегистрирован: 02. Ноября 2007
Пол: Мужской
Re: 1sqlite
Ответ #857 - 30. Ноября 2016 :: 11:55
Печать  
leov-001 писал(а) 30. Ноября 2016 :: 06:06:
Код (SQL)
Выбрать все
select 'r   123'*1 -- Получаем 0 или NULL не понятно
select '   123'*1 -- Получаем 123
 



Это не подойдет т.к. 342341E3 - тоже число, но E не цифра. Ну и дробные числа есть. И вот такое '342341#3'*1 тоже число...

https://github.com/eatnumber1/sqlite-regexp видел, но это обертка над pcre, а pcre для win собирается борландом, т.е. попарится сильно придется чтобы собрать.

regexp уже давно есть в исходниках sqlite, правда на юникодность не проверял... надо бы проверить как оно работает
  
Наверх
www  
IP записан
 
leov-001
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 150
Зарегистрирован: 05. Марта 2009
Re: 1sqlite
Ответ #858 - 30. Ноября 2016 :: 12:08
Печать  
Djelf писал(а) 30. Ноября 2016 :: 11:55:
leov-001 писал(а) 30. Ноября 2016 :: 06:06:
Код (SQL)
Выбрать все
select 'r   123'*1 -- Получаем 0 или NULL не понятно
select '   123'*1 -- Получаем 123
 



Это не подойдет т.к. 342341E3 - тоже число, но E не цифра. Ну и дробные числа есть. И вот такое '342341#3'*1 тоже число...

https://github.com/eatnumber1/sqlite-regexp видел, но это обертка над pcre, а pcre для win собирается борландом, т.е. попарится сильно придется чтобы собрать.

regexp уже давно есть в исходниках sqlite, правда на юникодность не проверял... надо бы проверить как оно работает


select 'r   123'*1 -- Получаем 0 или NULL не понятно
select '   123'*1 -- Получаем 123

Это было для "Нужно отобрать все товары, в которых строка "КодыПоставщика" состоит только из цифр."

Grey77 wrote Вчера :: 14:38:
Добрый день. Снова нужна помощь.
Подскажите как в запросе сделать проверку, что значение реквизита "Число"?
Есть у справочника номенклатура реквизит КодыПоставщика - тип строка (80) символов. Нужно отобрать все товары, в которых строка "КодыПоставщика" состоит только из цифр.
  
Наверх
 
IP записан
 
Djelf
God Member
*****
Отсутствует


Ubuntu + wine@etersoft
+ 1C 7.7

Сообщений: 631
Местоположение: Питер
Зарегистрирован: 02. Ноября 2007
Пол: Мужской
Re: 1sqlite
Ответ #859 - 30. Ноября 2016 :: 18:34
Печать  
leov-001 писал(а) 30. Ноября 2016 :: 12:08:
Это было для "Нужно отобрать все товары, в которых строка "КодыПоставщика" состоит только из цифр."

Спасибо за напоминание, но, повторяюсь
select '342341#3'*1 = 342341
Это не подходит под условие "состоит только из цифр."
« Последняя редакция: 30. Ноября 2016 :: 21:41 - Djelf »  
Наверх
www  
IP записан
 
Mink Snopes
Junior Member
**
Отсутствует


bookkeeping considered
harmful

Сообщений: 30
Местоположение: Dombabwe
Зарегистрирован: 05. Ноября 2013
Re: 1sqlite
Ответ #860 - 01. Декабря 2016 :: 06:20
Печать  
Продолжая тему. С вот таким условием остаются только проблемы с ведущими нолями в числах:
Код (SQL)
Выбрать все
...
where trim(КодыПоставщика) = cast(КодыПоставщика*1 as text)
 

  
Наверх
 
IP записан
 
Djelf
God Member
*****
Отсутствует


Ubuntu + wine@etersoft
+ 1C 7.7

Сообщений: 631
Местоположение: Питер
Зарегистрирован: 02. Ноября 2007
Пол: Мужской
Re: 1sqlite
Ответ #861 - 01. Декабря 2016 :: 09:38
Печать  
Тоже не прокатит из-за переполнения
SELECT '23423423423423423423423423423'*1 = 23423423423423400000000000000
следовательно условие = не сработает
  
Наверх
www  
IP записан
 
Djelf
God Member
*****
Отсутствует


Ubuntu + wine@etersoft
+ 1C 7.7

Сообщений: 631
Местоположение: Питер
Зарегистрирован: 02. Ноября 2007
Пол: Мужской
Re: 1sqlite
Ответ #862 - 01. Декабря 2016 :: 11:07
Печать  
С помощью cte вопрос решается, правда не учитывает разрыв пробелами "232 333", но это можно решить.
Код (SQL)
Выбрать все
WITH RECURSIVE
cte(id,pos,code,chk)
AS (
	SELECT
		id,1,t1.Артикул,substr(1,1) in ('',' ','0','1','2','3','4','5','6','7','8','9')
	FROM Справочник_Номенклатура AS t1
	WHERE LENGTH(trim(t1.Артикул))>0

	UNION ALL SELECT
		id,pos+1,code,chk+(substr(code,pos,1) in ('',' ','0','1','2','3','4','5','6','7','8','9'))
	FROM cte
	WHERE pos<=LENGTH(cte.code)
  -- LIMIT 1000
)
SELECT * FROM cte
WHERE chk=LENGTH(cte.code)
 

  
Наверх
www  
IP записан
 
Djelf
God Member
*****
Отсутствует


Ubuntu + wine@etersoft
+ 1C 7.7

Сообщений: 631
Местоположение: Питер
Зарегистрирован: 02. Ноября 2007
Пол: Мужской
Re: 1sqlite
Ответ #863 - 05. Декабря 2016 :: 17:02
Печать  
sqlite3_mod_pcre таки наконец собрался. Версия движка pcre2 10.22 с поддержкой юникода
лежит в каталоге https://cloud.mail.ru/public/9znr/ZJ6ULE9aR

Пример поиска номенклатуры где поле артикул состоит только из чисел без промежутков, пробелы спереди и сзади числа игнорируются.

Код (SQL)
Выбрать все
База = СоздатьОбъект("SQLiteBase");
База.Открыть(":memory:");
База.РазрешитьЗагрузкуРасширений(1);

SELECT load_extension('sqlite3_mod_pcre.dll');

SELECT
	ID [Номенклатура $Справочник.Номенклатура],Артикул
FROM Справочник_Номенклатура
WHERE Артикул REGEXP '^[\s]*[0-9]+[\s]*$'
 

« Последняя редакция: 06. Декабря 2016 :: 13:29 - Djelf »  
Наверх
www  
IP записан
 
alyuev
God Member
*****
Отсутствует


Гражданин Вселенной

Сообщений: 850
Местоположение: Одесса
Зарегистрирован: 07. Декабря 2007
Пол: Мужской
Re: 1sqlite
Ответ #864 - 06. Декабря 2016 :: 11:58
Печать  
Для какой версии 1sqlite это мод работает?
  

1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
Наверх
IP записан
 
alyuev
God Member
*****
Отсутствует


Гражданин Вселенной

Сообщений: 850
Местоположение: Одесса
Зарегистрирован: 07. Декабря 2007
Пол: Мужской
Re: 1sqlite
Ответ #865 - 06. Декабря 2016 :: 12:01
Печать  
И я правильно понял - пишу в запросе так:

ТекстЗапр="SELECT load_extension(...);
SELECT ...";

запр=База.НовыйЗапрос();
ТЗ=запр.ВыполнитьЗапрос(ТекстЗапр);

?

Просто у меня пока не взлетело... Запрос отрабатывает, но в результате добавляет колонку "load_extension(..."
  

1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
Наверх
IP записан
 
alyuev
God Member
*****
Отсутствует


Гражданин Вселенной

Сообщений: 850
Местоположение: Одесса
Зарегистрирован: 07. Декабря 2007
Пол: Мужской
Re: 1sqlite
Ответ #866 - 06. Декабря 2016 :: 12:31
Печать  
Заработало. Просто выполнил два отдельных запроса. Одним выполнять не хотел.
  

1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
Наверх
IP записан
 
Djelf
God Member
*****
Отсутствует


Ubuntu + wine@etersoft
+ 1C 7.7

Сообщений: 631
Местоположение: Питер
Зарегистрирован: 02. Ноября 2007
Пол: Мужской
Re: 1sqlite
Ответ #867 - 06. Декабря 2016 :: 13:22
Печать  
Это 2 отдельных запроса.
1sqlite не умеет выполнять запросы разделенные ";".
Вернее так - выполняется только первый!

upd: На оригинальных сборках работать не будет. В исходниках "РазрешитьЗагрузкуРасширений" есть, но видимо в сборах процедура была исключена, а по-умолчанию в sqlite загрузка расширений запрещена.
На всех моих сборках работает, начиная с 1.0.2.6/3.7.11 (ближайшей версии к оригинальной).

З.Ы. модуль еще не оптимизирован, можно прикрутить кеширование компиляции pcre, хотя уже и так довольно шустро работает.
« Последняя редакция: 06. Декабря 2016 :: 21:03 - Djelf »  
Наверх
www  
IP записан
 
alyuev
God Member
*****
Отсутствует


Гражданин Вселенной

Сообщений: 850
Местоположение: Одесса
Зарегистрирован: 07. Декабря 2007
Пол: Мужской
Re: 1sqlite
Ответ #868 - 07. Декабря 2016 :: 09:54
Печать  
У меня 1.0.2.6/3.7.17, поэтому работает.  Спасибо!!!
  

1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
Наверх
IP записан
 
doaqwh
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 3
Зарегистрирован: 07. Декабря 2016
Re: 1sqlite
Ответ #869 - 08. Декабря 2016 :: 02:39
Печать  
The land is valued for Buy RS 2007 Gold its rich and harvest; it is the land, but it is not food, but the truth. If can only breed of meditation and fantasy, even if again big can only sandy or Yanchi, the above even the grass too long not to come out
_________________________________________________________
He who has an art has everywhere a part: Buy Runescape Gold to be along side friends
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1 ... 56 57 [58] 59 60 ... 79
ОтправитьПечать