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

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

Показать
free-lancer-2018; +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 78 23.09.21 09:49 Сейчас в теме
(5)

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

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


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

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

https://infostart.ru/1c/articles/306536/
10. Sashares 33 24.01.22 14:30 Сейчас в теме
(9) https://wonderland.v8.1c.ru/blog/novye-funktsii-yazyka-zaprosov-i-sistemy-komponovki-dannykh/
С 8.3.20 можно проще ДлинаСтроки(StringLength) – вычисляет длину строки.
improg; native-api; anuar_medeup; METAL; AndreySchel; wolder; trumanl; mavlenkov; toliman; kaaasteeen; EvgeniyOlxovskiy; MoshkovEV; Istur; TSSV; jane_de_rio; Suxar; natal_tihom; +17 Ответить
12. Suxar 24.05.23 11:20 Сейчас в теме
11. Obertone 78 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 112 12.10.23 10:41 Сейчас в теме
Хм. С не помню какой версии платформы, но уже почти год как,
есть оператор в запросе СтрДлина(строковое поле)
15. u-pushken 20.11.23 11:32 Сейчас в теме
Эффект Манделы
На 8.3.22.2239 нет
Прикрепленные файлы:
Merkalov; maksa2005; +2 Ответить 2
16. laperuz 47 20.11.23 11:48 Сейчас в теме
(15)Потому что СтрДлина() это в языке 1С, а в языке запросов ДЛИНАСТРОКИ(), и она появилась в 8.3.20
Merkalov; wolder; mavlenkov; maksa2005; +4 Ответить
24. Vinzor 112 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 301 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) Так кроме длины строки много чего ещё нет.
Оставьте свое сообщение

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