Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Базы данных
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 12.05.2016, 14:54
starcon starcon вне форума
Новичок
 
Регистрация: 15.03.2014
Сообщения: 84
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию Лидирующие нули

Суть такая , есть БД , где в одной из колонок есть значения 005, 099, 0260.

Сделано для правильной сортировки.

Не могу понять , как организовать поиск в этой колонке с применением только 5, 99,260.

То есть, поиск работает только если указать 005, а 5 не ищет.

Требуется указывать только 5 и получать 005 или 260 и получать 0260

Благодарен
Ответить с цитированием
  #2  
Старый 12.05.2016, 15:14
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Можно запросом попробовать с оператором LIKE примерно так
Код:
SELECT имя_поля FROM имя_таблицы WHERE имя_поля LIKE "%99"
но это действует лишь с символьными данными
Ответить с цитированием
Этот пользователь сказал Спасибо Alegun за это полезное сообщение:
starcon (12.05.2016)
  #3  
Старый 12.05.2016, 15:26
Аватар для Aristarh Dark
Aristarh Dark Aristarh Dark вне форума
Модератор
 
Регистрация: 07.10.2005
Адрес: Москва
Сообщения: 2,906
Версия Delphi: Delphi XE
Репутация: выкл
По умолчанию

Цитата:
но это действует лишь с символьными данными
А лидирующие нули могут быть в числовых?
__________________
Некоторые программисты настолько ленивы, что сразу пишут рабочий код.

Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты.
Ответить с цитированием
  #4  
Старый 12.05.2016, 15:31
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Нет, наверное - это текст, посему конструкция с масочным предикатом - самое то
Ответить с цитированием
  #5  
Старый 12.05.2016, 15:31
starcon starcon вне форума
Новичок
 
Регистрация: 15.03.2014
Сообщения: 84
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от Alegun
Можно запросом попробовать с оператором LIKE примерно так
Код:
SELECT имя_поля FROM имя_таблицы WHERE имя_поля LIKE "%99"
но это действует лишь с символьными данными
Спасибо , я в первую очередь так и попробовал.
Но выбирает , 005,055,065,075,085 , ну поняли суть.

Не подходит
Ответить с цитированием
  #6  
Старый 12.05.2016, 15:36
starcon starcon вне форума
Новичок
 
Регистрация: 15.03.2014
Сообщения: 84
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Тип данных Varchar
Ответить с цитированием
  #7  
Старый 12.05.2016, 15:54
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Тогда может - выставите длину строки равной максимальной разрядности предпологаемого числа (напр. "0000") а дальше
Код:
function wr(ds: string): string;
var
 i, b: integer;
begin
 Result:= '0000';
 b:= 4;
 for i := Length(ds) downto 1 do
  begin
   Result[b]:= ds[i];
   dec(b);
  end;
end;
входная 55 будет как 0055

или

Код:
function wr(ds: string): string;
begin
 Result:= ds;
 while Length(Result) < 4 do
  Result:= '0' + Result;
end;

Последний раз редактировалось Alegun, 12.05.2016 в 16:17.
Ответить с цитированием
Этот пользователь сказал Спасибо Alegun за это полезное сообщение:
starcon (13.05.2016)
  #8  
Старый 12.05.2016, 16:34
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

Если для хранения числовых данных применен символьный тип поля, то это уже неправильно. даже ради правильной сортировки. ведь число всегда можно привести к символьной строке фиксированной длины и тогда сортировка будет работать как надо. пример:
Код HTML:
SELECT LPAD (3 * 4, 4, '0') FROM DUAL
=
Цитата:
0012
в данном случае придется LPAD() использовать в условии:
Цитата:
SELECT *
FROM table
WHERE field= LPAD (123, 4, '0')
__________________
Пишу программы за еду.
__________________

Последний раз редактировалось NumLock, 12.05.2016 в 16:37.
Ответить с цитированием
Этот пользователь сказал Спасибо NumLock за это полезное сообщение:
starcon (13.05.2016)
  #9  
Старый 12.05.2016, 17:57
Аватар для Aristarh Dark
Aristarh Dark Aristarh Dark вне форума
Модератор
 
Регистрация: 07.10.2005
Адрес: Москва
Сообщения: 2,906
Версия Delphi: Delphi XE
Репутация: выкл
По умолчанию

Если таблица не очень большая, то прямо в запросе переводи строку в число и сравнивай с числом. Медленно будет, но будет работать.
__________________
Некоторые программисты настолько ленивы, что сразу пишут рабочий код.

Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты.
Ответить с цитированием
Этот пользователь сказал Спасибо Aristarh Dark за это полезное сообщение:
starcon (13.05.2016)
  #10  
Старый 13.05.2016, 16:45
starcon starcon вне форума
Новичок
 
Регистрация: 15.03.2014
Сообщения: 84
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от NumLock
Если для хранения числовых данных применен символьный тип поля, то это уже неправильно. даже ради правильной сортировки. ведь число всегда можно привести к символьной строке фиксированной длины и тогда сортировка будет работать как надо. пример:
Код HTML:
SELECT LPAD (3 * 4, 4, '0') FROM DUAL
=

в данном случае придется LPAD() использовать в условии:

В столбце хранятся не только цифры , но и буквы
Ответить с цитированием
  #11  
Старый 14.05.2016, 21:09
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

Результат LPAD от этого не изменится
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 23:33.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter