Добавление лидирующих нолей

Работа VB и СУБД (Access, MSSQL, MySQL, Oracle и пр.)
Правила форума
При создании новой темы не забывайте указывать используемую СУБД.
gjghjc
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 659
Зарегистрирован: 13.10.2002 (Вс) 8:28
Откуда: БАЛАКЛАВА!!

Добавление лидирующих нолей

Сообщение gjghjc » 10.05.2007 (Чт) 18:10

Проблема такая.
В таблице номер паспорта почему-то содержится в формате NUmeric (сразу скажу тип поля изменить нельзя ибо не моя прога)
Необходимо при при выборе данных добавлять к номеру паспорта лидирующие ноли. Т.е. в рез. запросе номер паспорта должен содержать 6 цифр а не 3-4 как содержится в таблице.
Есть идея сделать так
Код: Выделить всё
Substring ('000000'  FROM 1 FOR 6 - Length PassNumber) || PassNumber as STR_PassNuber

Только вот почему-то FireBird ругается на length
Пробовал такую вещь как PAD (в описании то что мне нужно) но на нее тоже матюки выскакивают.
Если у кого есть описание всех Функций, команд и пр. по FireBird бУду очень признателен.
http://www.firebirdsql.org/manual/ru/ конечно не плохо но там нет того что мне нужно.
Утро добрым не бывает!

gjghjc
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 659
Зарегистрирован: 13.10.2002 (Вс) 8:28
Откуда: БАЛАКЛАВА!!

Сообщение gjghjc » 17.05.2007 (Чт) 14:01

Нашел!!!!
Решение конечно через ж.... но в нем не задействована UDF
Код: Выделить всё
substring ( (1000000 + pnumber) from 2 for 6) as Pnumber,


Может кому и понадобится.... в FireBird 1.5 работает!
Утро добрым не бывает!

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 17.05.2007 (Чт) 14:06

RIGHT("000000" || PassNumber, 6)
Lasciate ogni speranza, voi ch'entrate.

gjghjc
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 659
Зарегистрирован: 13.10.2002 (Вс) 8:28
Откуда: БАЛАКЛАВА!!

Сообщение gjghjc » 17.05.2007 (Чт) 17:04

Если бы все так было просто.
Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Token unknown - line 9, char 1.
RIGHT.
:)
Утро добрым не бывает!

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 17.05.2007 (Чт) 17:07

Ну значит посмотри в справочнике аналог функции Right$().
Lasciate ogni speranza, voi ch'entrate.

gjghjc
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 659
Зарегистрирован: 13.10.2002 (Вс) 8:28
Откуда: БАЛАКЛАВА!!

Сообщение gjghjc » 17.05.2007 (Чт) 17:18

Обрылся.... Есть только SUBSTRING .... но она работает как MID и в ней нельзя сделать нарезку с конца строки...
что-то типа
SUBSTRING (MyStr FROM 12 FOR -3 )
а RIGHT и LEFT не работают со строками :(
Утро добрым не бывает!

Igor_123
Осторожный Баянист
Осторожный Баянист
Аватара пользователя
 
Сообщения: 1325
Зарегистрирован: 21.07.2004 (Ср) 13:00
Откуда: Днепропетровск

Сообщение Igor_123 » 23.05.2007 (Ср) 14:56

gjghjc
Какая версия сервера?
для Yaffil :

REPLACE, STUFF, TRANSLATE, SIMILAR, ISDIGIT
Функция TRIM удаляет ведущие и/или конечные символы из строки. Её синтаксис таков:
TRIM ({ {LEADING|TRALING|BOTH} <string expression> FROM }<string expression> )
Если не один из параметров LEADING|TRALING|BOTH не задан, то принимается параметр по умолчанию BOTH. Если задан только один параметр <string expression>, то первый параметр считается равным BOTH, а второй единичному символу пробел.
Пример:
trim('a' from 'a134fa') результат '134f'
trim(' a134fa ') результат 'a134fa'
trim(leading 'a' from 'a134fa') результат 'a134f'
trim(trailing 'abc' from 'a134fabc') результат 'a134f'

Функция PAD противоположна функции TRIM. Она дополняет строку заданными символами до необходимого размера. Также как и функция TRIM, она может дополнять ведущими символами и/или конечными символами. Синтаксис:
PAD ({ {LEADING|TRALING|BOTH} <string expression> FROM }<string expression> FOR <numeric expression>)
Если не один из параметров LEADING|TRALING|BOTH не задан, то принимается параметр по умолчанию BOTH. Если задан только один параметр <string expression>, то первый параметр считается равным BOTH, а второй единичному символу пробел. Параметр <numeric expression> задаёт необходимое количество символов новой строки.
Пример:
PAD('a' FOR 11) результат ' A '

Функция POSITION производит поиск позиции первого вхождения подстроки в строке. Синтаксис:
POSITION ( <substring> IN <string>)

Функция LEFT[1] возвращает заданное количество символов с начала строки. Синтаксис:
LEFT (<string>, <length>)

Функция RIGHT[2] возвращает заданное количество символов с конца строки. Синтаксис:
RIGHT (<string>, <length>)

[1] Аналог функции LEFT в реализации MSSQL
[2] Аналог функции RIGHT в реализации MSSQL


Вот пример того, что тебе нужно
Скрипт на создание БД и заполнение данными:
/******************************************************************************/
/*** Generated by IBExpert 2007.05.20 23.05.2007 14:45:28 ***/
/******************************************************************************/

SET NAMES NONE;

CREATE DATABASE 'c:\Test.gdb'
USER 'SYSDBA' PASSWORD 'masterkey'
PAGE_SIZE 8192
DEFAULT CHARACTER SET NONE;



/******************************************************************************/
/*** Tables ***/
/******************************************************************************/



CREATE TABLE NEW_TABLE (
NEW_FIELD INTEGER
);


INSERT INTO NEW_TABLE (NEW_FIELD) VALUES (1);
INSERT INTO NEW_TABLE (NEW_FIELD) VALUES (2);
INSERT INTO NEW_TABLE (NEW_FIELD) VALUES (3);
INSERT INTO NEW_TABLE (NEW_FIELD) VALUES (4);
INSERT INTO NEW_TABLE (NEW_FIELD) VALUES (5);

COMMIT WORK;



/******************************************************************************/
/*** Privileges ***/
/******************************************************************************/


/* Privileges of users */
GRANT SELECT ON RDB$ROLES TO PUBLIC;

И сам запрос:
select PAD(LEADING '0' from cast(new_field as varchar(12)) for 6) FROM new_table

Результат:
PAD

000001
000002
000003
000004
000005

Моя версия версия сервера Server Version: NI-1.5.892 Yaffil SQL Server
Как я знаю в FireBird 2.0 функции Yaffil поддерживаются.

Удачи!
Водки я вам не обещаю, но погуляем хорошо.
И. Сусанин.

Аватара (с) Тёмыч


Вернуться в Базы данных

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 224

    TopList