Как узнать запросом длину поля типа varchar (в символах).

IBX, FIBPlus, UIB, ADO, .Net и прочее-прочее-прочее, в общем все, что относится к созданию приложений, работающих с InterBase, Firebird и Yaffil - клиент-серверных, трехзвенных, консольных и т.п.

Модератор: kdv

Ответить
0xb800
Сообщения: 6
Зарегистрирован: 16 авг 2005, 21:37

Как узнать запросом длину поля типа varchar (в символах).

Сообщение 0xb800 » 16 авг 2005, 21:52

Всем здравствуйте !
BCB 6, InterBase 6.5.
Вопрос такой: в базе есть таблица, надо узнать длину её поля типа varchar (в символах).
Понятно, что можно, типа IBTable1->FieldByName("Name")->Size, но на фига мне IBTable, я запросом хочу.
Читал о системных таблицах InterBase, но всё равно не понял, как правильно составить запрос.

PS: Согласен с возможными критическими замечаниями в свой адрес - я новичок в этой области знаний.
PPS: Заранее спасибо.

Anton Glasunov
Сообщения: 31
Зарегистрирован: 26 окт 2004, 15:18

Сообщение Anton Glasunov » 16 авг 2005, 23:35

В поставку Interbase(не помню с какой версии), входит библиотека ib_udf.dll, в ней есть функция strlen

Код: Выделить всё

DECLARE EXTERNAL FUNCTION STRLEN
CSTRING(32767) CHARACTER SET WIN1251
RETURNS INTEGER BY VALUE 
ENTRY_POINT 'IB_UDF_strlen' MODULE_NAME 'ib_udf';
похожие функции есть в других udf библиотеках. Подробности можно найти на сайте и(или) в документации.

Merlin
Динозавр IB/FB
Сообщения: 1502
Зарегистрирован: 27 окт 2004, 11:44

Сообщение Merlin » 17 авг 2005, 00:18

Имхо он метаданными интересуется. То есть, не размером конкретного значения поля, а описанием. Если бы не лето - подумал бы что вопрос из какой-нибудь лабы или курсовика. Даже если так, на второй второй вопрос отвечать не буду, дальше пусть ыщо раз читает про системные таблицы и думкает :)

Код: Выделить всё

Select F.rdb$character_length
From rdb$relation_fields RF
  Inner Join rdb$fields F On F.rdb$field_name=RF.rdb$field_source
Where RF.rdb$relation_name='TABLETNAME'
    And RF.rdb$field_name='FIELDNAME'

0xb800
Сообщения: 6
Зарегистрирован: 16 авг 2005, 21:37

Сообщение 0xb800 » 17 авг 2005, 00:29

2Anton Glasunov
Спасибо за ответ, но я, наверное, мутновато сформулировал вопрос...
Я имел в виду размер самого поля. Ну, например, если поле объявлено VARCHAR (30), то искомый результат будет 30,
а функция strlen, насколько я понял, будет ввозвращать мне переменную величину - длину строки, которая записана в этом поле.

0xb800
Сообщения: 6
Зарегистрирован: 16 авг 2005, 21:37

Сообщение 0xb800 » 17 авг 2005, 00:35

2 Merlin
Спасибо за участие, пойду ыщо раз прочитаю про системные таблицы и подумкаю.

0xb800
Сообщения: 6
Зарегистрирован: 16 авг 2005, 21:37

Сообщение 0xb800 » 17 авг 2005, 01:02

2 Merlin
Вот-вот, именно метаданными я и интересовался (чёрт, а слово-то какое красивое !). И вот ведь character_length, а я всё в field_length тыкался. Спасибо, Merlin, ещё раз - ведь просто разжевал и в рот положил ! Всё заработало !!

PS: А второго вопроса я вроде-бы не задавал...
PPS: Лекции-то никто не читает, а со времён последней лабы уж 21 год прошёл (я строитель-технолог в одной из ипостасей).

Ответить