А как в запросе посчитать длину строки?

1. TimofeySin 172 02.03.11 12:26 Сейчас в теме
А как в запросе посчитать длину строки?
EvgeniyOlxovskiy; +1 Ответить
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. TimofeySin 172 02.03.11 12:38 Сейчас в теме
А нащшел ответ:
ВЫБОР
 КОГДА КартаЗаказаКрасочность.Наименование ПОДОБНО "__"
 ТОГДА 2
 ИНАЧЕ 1
КОНЕЦ
shaykhelov; atdonya; GoodDay; Agrozentr; simuljakr; Dimeron; Tash.B; user1058210; Johnson1987; hardkotian; maxunov95; 🅵🅾️🆇; vis_tmp; +13 Ответить
3. Поручик 4691 02.03.11 12:39 Сейчас в теме
4. tyfmyl 12.09.18 17:00 Сейчас в теме
Старое, но все же оставлю тут след.
Один из извратов:
ВЫБРАТЬ
	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 <= 10000
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	МАКСИМУМ(ВТ_НомераСимволов.НомерСимвола) КАК НомерСимвола,
	&ДлинаСтроки КАК ДлинаСтроки
ИЗ
	ВТ_НомераСимволов КАК ВТ_НомераСимволов
ГДЕ
	НЕ ПОДСТРОКА(&ДлинаСтроки, ВТ_НомераСимволов.НомерСимвола, 1) = ""
Показать
5. arhal 05.04.19 16:18 Сейчас в теме
Выбор 
    Когда ПОДСТРОКА(Наименование, 0,1) = "" Тогда
          0
   Когда ПОДСТРОКА(Наименование, 0,1) <> "" И ПОДСТРОКА(Наименование, 1,1) = "" Тогда
          1  
    Когда ПОДСТРОКА(Наименование, 1,1) <> "" И ПОДСТРОКА(Наименование, 2,1) = "" Тогда
          2 
    Когда ПОДСТРОКА(Наименование, 2,1) <> "" И ПОДСТРОКА(Наименование, 3,1) = "" Тогда
          3
Конец
Показать


Размер этой портянки на ваше усмотрение...
6. dhurricane 05.04.19 16:24 Сейчас в теме
(5)
Когда ПОДСТРОКА(Наименование, 0,1) <> ""

Нет необходимости осуществлять такую проверку, т.к. невыполнение предыдущего условия гарантирует вполнение этого.
7. Obertone 77 23.09.21 09:49 Сейчас в теме
(5)

Можно, кстати, и аналогичную конструкцию применять с использованием выражения в строку:

Выбор
Когда ВЫРАЗИТЬ(Наименование КАК СТРОКА(0)) = Наименование Тогда
0
Когда ВЫРАЗИТЬ(Наименование КАК СТРОКА(1)) = Наименование Тогда
1
Когда ВЫРАЗИТЬ(Наименование КАК СТРОКА(2)) = Наименование Тогда
2
Когда ВЫРАЗИТЬ(Наименование КАК СТРОКА(3)) = Наименование Тогда
3
Конец 
Показать


.....
8. Obertone 77 23.12.21 13:26 Сейчас в теме
Для полей с неограниченной длиной можно сделать так в запросе в условии насчёт сравнения длин строк:

ГДЕ ПОДСТРОКА(ВЫРАЗИТЬ(Наименование КАК СТРОКА(999)), 0, 3) <> ПОДСТРОКА(ВЫРАЗИТЬ(Наименование КАК СТРОКА(1)), 0, 1)
9. Obertone 77 24.01.22 14:18 Сейчас в теме
В виде колонки запроса длину строки некоторого поля можно получить специальным запросом, который опубликован в последнем пункте этой статьи:

https://infostart.ru/1c/articles/306536/
10. Sashares 35 24.01.22 14:30 Сейчас в теме
(9) https://wonderland.v8.1c.ru/blog/novye-funktsii-yazyka-zaprosov-i-sistemy-komponovki-dannykh/
С 8.3.20 можно проще ДлинаСтроки(StringLength) – вычисляет длину строки.
anuar_medeup; METAL; AndreySchel; wolder; trumanl; mavlenkov; toliman; kaaasteeen; EvgeniyOlxovskiy; MoshkovEV; Istur; TSSV; jane_de_rio; Suxar; natal_tihom; +15 Ответить
12. Suxar 24.05.23 11:20 Сейчас в теме
11. Obertone 77 25.01.22 12:29 Сейчас в теме
(10) Да, кстати, простой способ, жаль только, что не везде есть платформа 8.3.20.
13. Азверин 3 12.10.23 09:27 Сейчас в теме
ВЫБРАТЬ
	Номенклатура.Ссылка,
	ВЫРАЗИТЬ(Номенклатура.НаименованиеПолное КАК СТРОКА(75)) КАК Огр75,
	ВЫРАЗИТЬ(Номенклатура.НаименованиеПолное КАК СТРОКА(100)) КАК Огр100
ПОМЕСТИТЬ вт
ИЗ
	Справочник.Номенклатура КАК Номенклатура
ГДЕ
	НЕ Номенклатура.ПометкаУдаления
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	вт.Ссылка,
	вт.Огр75,
	вт.Огр100
ИЗ
	вт КАК вт
ГДЕ
	вт.Огр75<> вт.Огр100
Показать
14. Vinzor 107 12.10.23 10:41 Сейчас в теме
Хм. С не помню какой версии платформы, но уже почти год как,
есть оператор в запросе СтрДлина(строковое поле)
15. u-pushken 20.11.23 11:32 Сейчас в теме
Эффект Манделы
На 8.3.22.2239 нет
Прикрепленные файлы:
maksa2005; +1 Ответить
16. laperuz 47 20.11.23 11:48 Сейчас в теме
(15)Потому что СтрДлина() это в языке 1С, а в языке запросов ДЛИНАСТРОКИ(), и она появилась в 8.3.20
wolder; mavlenkov; maksa2005; +3 Ответить
24. Vinzor 107 21.11.23 19:15 Сейчас в теме
(16) наспех писал, малость промахнулся

Для u-pushken
Вообще странно, что такие вопросы люди задают. В том же конструкторе запросов подсказка есть, и синтакс-помощник тоже.
Если не уверен, всегда туда заглядываю.
17. u-pushken 20.11.23 12:00 Сейчас в теме
18. Said-We 20.11.23 13:04 Сейчас в теме
Разработчики платформы 1С известные садисты над программистами. :-)
Десяток лет не давали основные функции со строкой. И продолжают часть обычного функционала SQL не давать.
Причина - это файловая версия.
Прикрепленные файлы:
19. user1880116 20.11.23 14:06 Сейчас в теме
(18) Вау, ты можешь написать знаешь запрос на SQL! Ты крут!
25. METAL 299 20.08.24 21:04 Сейчас в теме
(18)
Разработчики платформы 1С известные садисты над программистами. :-)
Десяток лет не давали основные функции со строкой. И продолжают часть обычного функционала SQL не давать.
Причина - это файловая версия.

Прикольно, спасибо, получилось таким способом быстро узнать максимальную длину строки в довольно большой таблице!
20. Marses 20.11.23 17:36 Сейчас в теме
Написать запрос с ключом* связи, в выборке посчитать количество символов и через менеджера временных таблиц соединить результат с нужным тебе запросом. Например
Номенклатура* | Наименование , обрабатываем запросом и получаем
Номенклатура* | Количество символов и связываем с нужным тебе запросом
21. Said-We 20.11.23 18:13 Сейчас в теме
(20) Не совсем понял как, но ранее делали как в посте 4. По факту разбивали посимвольно строку и считали количество символов. В общем и сейчас поступают примерно так же. Либо в ТЗ выгружают, там считают и обратно в запрос. Извращаются в общем.

1С функции добавила в запросы, но режим совместимости в типовых может не позволять использовать эти "новшества". В 15 посту наверное с этим и столкнулись.
По факту на сейчас, что добавили, что нет. Пока этими новшествами не начнут в типовых активно пользоваться и/или изменят режим совместимости на более высокий. На сейчас только играться в пустых или своих базах.

Язык запросов активно 1С менять и развивать не будет. Они сосредоточились на бантиках. Файловая ставит преграду в развитии языка запросов, так как надо все эти новшества реализовывать на ней. А это сложно, долго и не хочется.

Если быстро, то это отказ от файловой. Взамен предложить PsgSQL с вариациями по количеству пользователей.
Но этого тоже не будет.

Поэтому продолжаем извращаться.
22. laperuz 47 20.11.23 18:58 Сейчас в теме
(21)Режим совместимости для использования этих функций менять не нужно, все работает и со старыми режимами совместимости.
Ну и если мы говорим о типовых от 1С, все основные конфигурации уже на режиме совместимости 8.3.21
23. Said-We 20.11.23 20:50 Сейчас в теме
(22) Так кроме длины строки много чего ещё нет.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот