В исходной статье был продемонстрирован оригинальный алгоритм определения длины строки в запросе. Однако при высокой скорости вычислений выражение для получения длины строки получается чрезвычайно громозким. На каждую возможную длину строки требуется записать вариант "ТОГДА". В приведенном ниже решении этот недостаток устранен:
Автор: ildarovich
ВЫБРАТЬ
Стр, Х
ИЗ (ВЫБРАТЬ Стр, ВЫБОР КОГДА ПОДСТРОКА(Стр, Х - 0, 512) = "" ТОГДА Х - 1 ИНАЧЕ Х КОНЕЦ КАК Х
ИЗ (ВЫБРАТЬ Стр, ВЫБОР КОГДА ПОДСТРОКА(Стр, Х - 1, 512) = "" ТОГДА Х - 2 ИНАЧЕ Х КОНЕЦ КАК Х
ИЗ (ВЫБРАТЬ Стр, ВЫБОР КОГДА ПОДСТРОКА(Стр, Х - 3, 512) = "" ТОГДА Х - 4 ИНАЧЕ Х КОНЕЦ КАК Х
ИЗ (ВЫБРАТЬ Стр, ВЫБОР КОГДА ПОДСТРОКА(Стр, Х - 7, 512) = "" ТОГДА Х - 8 ИНАЧЕ Х КОНЕЦ КАК Х
ИЗ (ВЫБРАТЬ Стр, ВЫБОР КОГДА ПОДСТРОКА(Стр, Х - 15, 512) = "" ТОГДА Х - 16 ИНАЧЕ Х КОНЕЦ КАК Х
ИЗ (ВЫБРАТЬ Стр, ВЫБОР КОГДА ПОДСТРОКА(Стр, Х - 31, 512) = "" ТОГДА Х - 32 ИНАЧЕ Х КОНЕЦ КАК Х
ИЗ (ВЫБРАТЬ Стр, ВЫБОР КОГДА ПОДСТРОКА(Стр, Х - 63, 512) = "" ТОГДА Х - 64 ИНАЧЕ Х КОНЕЦ КАК Х
ИЗ (ВЫБРАТЬ Стр, ВЫБОР КОГДА ПОДСТРОКА(Стр, Х - 127, 512) = "" ТОГДА Х - 128 ИНАЧЕ Х КОНЕЦ КАК Х
ИЗ (ВЫБРАТЬ Стр, ВЫБОР КОГДА ПОДСТРОКА(Стр, Х - 255, 512) = "" ТОГДА Х - 256 ИНАЧЕ Х КОНЕЦ КАК Х
ИЗ (ВЫБРАТЬ Стр, ВЫБОР КОГДА ПОДСТРОКА(Стр, Х - 511, 512) = "" ТОГДА Х - 512 ИНАЧЕ Х КОНЕЦ КАК Х
ИЗ Дано КАК ВЗ) КАК ВЗ) КАК ВЗ) КАК ВЗ) КАК ВЗ) КАК ВЗ) КАК ВЗ) КАК ВЗ) КАК ВЗ) КАК ВЗ) КАК ВЗ
//Для строки длиной до 1024 символов используется система из 10-ти вложенных запросов. Исходная таблица, кроме самой строки, должна содержать начальное значение поиска Х, равное 1024.
//Данный вариант не учитывает в длине строки концевые пробелы. Если это действительно требуется, то придется использовать вот такой вариант:
ВЫБРАТЬ
Стр, Х
ИЗ (ВЫБРАТЬ Стр, ВЫБОР КОГДА ПОДСТРОКА(Стр, Х - 0, 1) + "!" = "!" ТОГДА Х - 1 ИНАЧЕ Х КОНЕЦ Х
ИЗ (ВЫБРАТЬ Стр, ВЫБОР КОГДА ПОДСТРОКА(Стр, Х - 1, 1) + "!" = "!" ТОГДА Х - 2 ИНАЧЕ Х КОНЕЦ Х
ИЗ (ВЫБРАТЬ Стр, ВЫБОР КОГДА ПОДСТРОКА(Стр, Х - 3, 1) + "!" = "!" ТОГДА Х - 4 ИНАЧЕ Х КОНЕЦ Х
ИЗ (ВЫБРАТЬ Стр, ВЫБОР КОГДА ПОДСТРОКА(Стр, Х - 7, 1) + "!" = "!" ТОГДА Х - 8 ИНАЧЕ Х КОНЕЦ Х
ИЗ (ВЫБРАТЬ Стр, ВЫБОР КОГДА ПОДСТРОКА(Стр, Х - 15, 1) + "!" = "!" ТОГДА Х - 16 ИНАЧЕ Х КОНЕЦ Х
ИЗ (ВЫБРАТЬ Стр, ВЫБОР КОГДА ПОДСТРОКА(Стр, Х - 31, 1) + "!" = "!" ТОГДА Х - 32 ИНАЧЕ Х КОНЕЦ Х
ИЗ (ВЫБРАТЬ Стр, ВЫБОР КОГДА ПОДСТРОКА(Стр, Х - 63, 1) + "!" = "!" ТОГДА Х - 64 ИНАЧЕ Х КОНЕЦ Х
ИЗ (ВЫБРАТЬ Стр, ВЫБОР КОГДА ПОДСТРОКА(Стр, Х - 127, 1) + "!" = "!" ТОГДА Х - 128 ИНАЧЕ Х КОНЕЦ Х
ИЗ (ВЫБРАТЬ Стр, ВЫБОР КОГДА ПОДСТРОКА(Стр, Х - 255, 1) + "!" = "!" ТОГДА Х - 256 ИНАЧЕ Х КОНЕЦ Х
ИЗ (ВЫБРАТЬ Стр, ВЫБОР КОГДА ПОДСТРОКА(Стр, Х - 511, 1) + "!" = "!" ТОГДА Х - 512 ИНАЧЕ Х КОНЕЦ Х
ИЗ Дано КАК ВЗ) КАК ВЗ) КАК ВЗ) КАК ВЗ) КАК ВЗ) КАК ВЗ) КАК ВЗ) КАК ВЗ) КАК ВЗ) КАК ВЗ) КАК ВЗ
{} Ожидается идентификатор Орфографическая ошибка в громозким: громозким
Определение длины строки в запросе
ШаблонТекстаЗапросаОпределенияБлижайшихДатПоГрафикуРаботы (БСП)
СтрокаНеограниченнойДлины (БСП)