С Новым годом! Форум программистов, компьютерный форум, киберфорум
Firebird/InterBase
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.54/26: Рейтинг темы: голосов - 26, средняя оценка - 4.54
0 / 0 / 0
Регистрация: 19.05.2011
Сообщений: 89
1

Выделить число

26.07.2012, 17:51. Показов 4736. Ответов 11
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем привет!

есть строки содержащие числа, например: 1А, 8В, 10С, 5/3 и т.д.

мне нужно получить число из этих строк, причем до первого не числового символа. Есть ли такая возможность в firebird?????

Поясню зачем, мне нужно отсортировать значения в запросе и я хочу к числу меньшему 10 приставить 0 (нолик), чтобы сортировалось правильно. А то, например, если этого не делать то 10А будет выше чем 8А.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
26.07.2012, 17:51
Ответы с готовыми решениями:

Выделить в массиве число выделить его каким-нибудь цветом
Выделить минимальное и максимальное значение в массиве каким-нибудь цветом отличающимся от...

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

Выделить число
Всем привет помогите нуба у меня есть int num = 123; как делать чтоб смог в консольке печатать...

Выделить число в календаре!
Привет всем!!) Ребята есть компонент TMonthCalenar и ест список дат, которые должны быть в нем...

11
3700 / 1359 / 482
Регистрация: 31.05.2012
Сообщений: 4,803
26.07.2012, 20:42 2
Как вариант - написать udf-функцию
1
912 / 877 / 62
Регистрация: 06.01.2010
Сообщений: 2,367
Записей в блоге: 6
26.07.2012, 22:58 3
Цитата Сообщение от vso Посмотреть сообщение
Поясню зачем, мне нужно отсортировать значения в запросе и я хочу к числу меньшему 10 приставить 0 (нолик), чтобы сортировалось правильно. А то, например, если этого не делать то 10А будет выше чем 8А.
В свете такой формулировки, и при условии, что число на первой позиции всегда есть, и что сама строка точно не короче двух символов, можно сортировать примерно по такому выражению:
SQL
1
ORDER BY iif(SUBSTRING(FIELD1 FROM 2 FOR 1) BETWEEN '0' AND '9', FIELD1, '0' || FIELD1)
т.е. к столбцу (де-факто выражению из одного столбца) прибавляется '0', если второй символ в строке не цифровой
1
0 / 0 / 0
Регистрация: 19.05.2011
Сообщений: 89
27.07.2012, 16:14  [ТС] 4
arni, огромное спасибо, пока работает, но все же это не чистое решение.

Пока Вы не подсказали пытался написать udf.

Что удивительно тестирую на дельфе все работает, компилирую и подключаю в firebird возвращает одни нули.

Вот что я написал на дельфи:

Delphi
1
2
3
4
5
6
7
8
function ValX(CString: PChar): Integer; cdecl; export;
var
 I, Code: Integer;
begin
  Val(StrPas(CString), I, Code);
 
  Result := I;
end;
так я ее объявил в firebird:
Oracle 11 SQL
1
2
3
4
DECLARE EXTERNAL FUNCTION VAL
    VARCHAR(256)
RETURNS INTEGER BY VALUE
ENTRY_POINT 'ValX' MODULE_NAME 'UDFDemo';
Как тестировал в дельфи:

Создал форму, на нее бросил Edit, Button и Label.

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

А как только использую в firebird получаю одни нули????
0
912 / 877 / 62
Регистрация: 06.01.2010
Сообщений: 2,367
Записей в блоге: 6
27.07.2012, 16:45 5
vso, не, в udf я полный 0.
Вот если напишешь, почему не чистое решение, и какие из посылок могут быть нарушены (и как именно нарушены), то могу попробовать доработать SQL
0
1263 / 706 / 62
Регистрация: 21.12.2009
Сообщений: 2,256
28.07.2012, 11:18 6
arni, а similar to здесь нельзя попробовать?
0
912 / 877 / 62
Регистрация: 06.01.2010
Сообщений: 2,367
Записей в блоге: 6
29.07.2012, 12:33 7
SAMZ, надо сначала выудить у ТС всю правду о том, как формируется значение строки, на каких позициях что может стоять (а может и не стоять). Вобщем пока мало информации.
0
0 / 0 / 0
Регистрация: 19.05.2011
Сообщений: 89
30.07.2012, 09:11  [ТС] 8
Цитата Сообщение от arni Посмотреть сообщение
SAMZ, надо сначала выудить у ТС всю правду о том, как формируется значение строки, на каких позициях что может стоять (а может и не стоять). Вобщем пока мало информации.
Информация пока (почему пока? потому что в нашей работе постоянно возникаю новые вводные) хранится в таком виде, например: 4BKS00GE021.2A или 4BKS00GE021.10A или 4BKS00GE021.2/3 или 4BKS00GE021.6/9
это несколько вариантов, описывающие основной принцип в каком виде хранится информация в этом поле. Причем до точки закодировано устройство, а после точки место которое в нем используется. Соответственно надо сортировать места в пределах одного устройства в порядке возрастания. Поэтому я в первом представлении делаю так:

T-SQL
1
RIGHT(Dv."ПИТАНИЕ", IIF(Dv."ПИТАНИЕ" is NULL, null, CHAR_LENGTH(Dv."ПИТАНИЕ") - Position('.' IN Dv."ПИТАНИЕ"))) as "ПИТАНИЕ"
в следующем результирующем представлении делаю так, как подсказал arni:

T-SQL
1
IIF(SUBSTRING(Vt."ПИТАНИЕ" FROM 2 FOR 1) BETWEEN '0' AND '9', Vt."ПИТАНИЕ", '0' || Vt."ПИТАНИЕ") AS GROUP2
0
1263 / 706 / 62
Регистрация: 21.12.2009
Сообщений: 2,256
30.07.2012, 09:34 9
Цитата Сообщение от vso Посмотреть сообщение
Причем до точки закодировано устройство, а после точки место которое в нем используется
ИМХО, конечно, но так бы делать никогда не стал. Устройство кодировал бы отдельно, место отдельно. Если во внешнем представлении надо организовать код <УСТРОЙСТВО>.<MЕСТО>, то это можно сделать вычисляемым полем.
Ну, и использование кирилицы при именовании объектов БД считаю экзотикой
0
0 / 0 / 0
Регистрация: 19.05.2011
Сообщений: 89
30.07.2012, 10:01  [ТС] 10
Ну, и использование кирилицы при именовании объектов БД считаю экзотикой
Это наследство.

Устройство кодировал бы отдельно, место отдельно.
Это не отменяет необходимости сортировки -> выделения числа чтобы сортировать...
0
479 / 392 / 112
Регистрация: 24.04.2012
Сообщений: 1,632
Записей в блоге: 3
31.07.2012, 12:01 11
Может что-то типа такого подойдет
SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
EXECUTE block (text VARCHAR(256) = :text)
  RETURNS (chislo INTEGER)/*, chislo_var varchar(10), pos smallint)*/
AS
DECLARE variable pos SMALLINT;
DECLARE variable chislo_var VARCHAR(10);
BEGIN
  pos = POSITION('.' IN text) + 1;
  while (pos < CHAR_LENGTH(text)) do
  BEGIN
    IF(SUBSTRING(text FROM pos FOR 1) BETWEEN '0' AND '9') THEN
      chislo_var = COALESCE(chislo_var,'') || SUBSTRING(text FROM pos FOR 1);
    pos = pos + 1;
  END
  chislo = CAST(chislo_var AS INTEGER);
  suspend;
END;
Добавлено через 6 часов 22 минуты
если решил проблему отпишись как сделал.
1
0 / 0 / 0
Регистрация: 19.05.2011
Сообщений: 89
31.07.2012, 16:09  [ТС] 12
Bit_Man, т.к. сроки всегда горят и хоть медленно но работает я использую вариант arni. Но как только сдадим документацию, планирую все же добить udf и испробовать твой вариант.
А возможно даже подрехтую базу, разделю на две части относительно точки и заставлю сразу вносить 01, 02 и т.д.
0
31.07.2012, 16:09
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
31.07.2012, 16:09
Помогаю со студенческими работами здесь

Выделить число из строки
Есть строка типа string; string s = &quot;search 9&quot;, как выделить число из этой строки и приравнять его...

Выделить из строки число
Дано: id=212313123312124 Как взять отсюда только 212313123312124 и записать в переменную? var ID...

Выделить число из вектора
Здравствуйте)имеется вектор A.Как в матлабе выделить максимальное число из этого вектора которое...

Выделить из строки число
Всем привет! Есть строка: Total transferred file size: 748190 bytes нужно в переменную...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Книги и учебные ресурсы по C#
InfoMaster 08.01.2025
Базовые учебники и руководства Одной из лучших книг для начинающих является "C# 10 и . NET 6 для начинающих" Эндрю Троелсена и Филиппа Джепикса . Книга последовательно раскрывает основные концепции. . .
Что такое NullReferenceEx­­­ception и как исправить?
InfoMaster 08.01.2025
NullReferenceException - одно из самых распространенных исключений, с которым сталкиваются разработчики на C#. Это исключение возникает при попытке обратиться к членам объекта (методам, свойствам или. . .
Что такое Null Pointer Exception (NPE) и как это исправить?
InfoMaster 08.01.2025
Null Pointer Exception (NPE) - это одно из самых распространенных исключений в Java, которое возникает при попытке использовать ссылку на объект, значение которой равно null. Это исключение относится. . .
Русский язык в консоли C++
InfoMaster 08.01.2025
При разработке программ на C++ одной из частых проблем, с которой сталкиваются русскоязычные программисты, является корректное отображение кириллицы в консольных приложениях. Эта проблема особенно. . .
Telegram бот на C#
InfoMaster 08.01.2025
Разработка ботов для Telegram стала неотъемлемой частью современной экосистемы мессенджеров. C# предоставляет мощный и удобный инструментарий для создания разнообразных ботов, от простых. . .
Использование GraphQL в Go (Golang)
InfoMaster 08.01.2025
Go (Golang) является одним из наиболее популярных языков программирования, используемых для создания высокопроизводительных серверных приложений. Его архитектурные особенности и встроенные. . .
Что лучше использовать при создании класса в Java: сеттеры или конструктор?
Alexander-7 08.01.2025
Вопрос подробнее: На вопрос: «Когда одновременно создаются конструктор и сеттеры в классе – это нормально?» куратор уточнил: «Ваш класс может вообще не иметь сеттеров, а только конструктор и геттеры. . .
Как работать с GraphQL на TypeScript
InfoMaster 08.01.2025
Введение в GraphQL и TypeScript В современной разработке веб-приложений GraphQL стал мощным инструментом для создания гибких и эффективных API. В сочетании с TypeScript, эта технология. . .
Счётчик на базе сумматоров + регистров и генератора сигналов согласования.
Hrethgir 07.01.2025
Создан с целью проверки скорости асинхронной логики: ранее описанного сумматора и предополагаемых fast регистров. Регистры созданы на базе ранее описанного, предполагаемого fast триггера. То-есть. . .
Как перейти с Options API на Composition API в Vue.js
BasicMan 06.01.2025
Почему переход на Composition API актуален В мире современной веб-разработки фреймворк Vue. js продолжает эволюционировать, предлагая разработчикам все более совершенные инструменты для создания. . .
Архитектура современных процессоров
inter-admin 06.01.2025
Процессор (центральный процессор, ЦП) является основным вычислительным устройством компьютера, которое выполняет обработку данных и управляет работой всех остальных компонентов системы. Архитектура. . .
История создания реляционной модели баз данных, правила Кодда
Programming 06.01.2025
Предпосылки создания реляционной модели В конце 1960-х годов компьютерная индустрия столкнулась с серьезными проблемами в области управления данными. Существовавшие на тот момент модели данных -. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru