powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Как узнать тип поля sql-запросом
3 сообщений из 3, страница 1 из 1
Как узнать тип поля sql-запросом
    #38638007
pH20
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как с помощью sql-запроса вывести тип поля в таблице, а еще лучше вывести длину поля.
Так получилось что пришлось пользоваться не программным api а парсить результат работы isql.exe (вот чтоб корректно спарсить вывод isql.exe и нужны такие данные).
...
Рейтинг: 0 / 0
Как узнать тип поля sql-запросом
    #38638010
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Как узнать тип поля sql-запросом
    #38638644
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pH20Как с помощью sql-запроса вывести тип поля в таблице, а еще лучше вывести длину поля.Поскребав по старым сусекам, нарыл тут кое-чё
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
select
    rf.rdb$relation_name tab_name
    ,rf.rdb$field_position fld_pos
    ,rf.rdb$field_name fld_name
    ,case f.rdb$field_type
        when 7 then 'smallint'
        when 8 then 'integer'
        when 10 then 'float'
        when 14 then 'char(' || cast(cast(f.rdb$field_length / cx.div as int) as varchar(5)) || ')'
        when 16 then -- dialect 3 only
          case f.rdb$field_sub_type
            when 0 then 'bigint'
            when 1 then 'numeric(15,' || cast(-f.rdb$field_scale as varchar(6)) || ')'
            when 2 then 'decimal(15,' || cast(-f.rdb$field_scale as varchar(6)) || ')'
            else 'unknown'
          end
        when 12 then 'date'
        when 13 then 'time'
        when 27 then -- dialect 1 only
          case f.rdb$field_scale
            when 0 then 'double precision'
            else 'numeric(15,' || cast(-f.rdb$field_scale as varchar(6)) || ')'
          end
        when 35 then iif(di=1, 'date', 'timestamp')
        when 37 then 'varchar(' || cast(cast(f.rdb$field_length / cx.div as int) as varchar(5)) || ')'
        when 261 then 'blob sub_type ' || f.rdb$field_sub_type || ' segment size ' || f.rdb$segment_length
        else 'unknown'
    end fld_type
    ,cx.fld_charset
    ,cx.fld_collation
from (select m.mon$sql_dialect di from mon$database m) m
join rdb$relation_fields rf on 1=1
join rdb$relations rr on rf.rdb$relation_name=rr.rdb$relation_name
join rdb$fields f on rf.rdb$field_source=f.rdb$field_name
left join (
    select
        co.rdb$character_set_id fld_cset_id,
        co.rdb$collation_id fld_coll_id,
        co.rdb$collation_name fld_collation,
        rdb$character_set_name fld_charset,
        decode( ce.rdb$character_set_name,  upper('utf8'), 4, upper('unicode_fss'), 3,  1) div
    from rdb$collations co
    join rdb$character_sets ce on co.rdb$character_set_id=ce.rdb$character_set_id
) cx on  f.rdb$character_set_id=cx.fld_cset_id and f.rdb$collation_id = cx.fld_coll_id
where
    coalesce(rf.rdb$system_flag,0)=0
    and coalesce(rr.rdb$system_flag,0)=0
    and rr.rdb$relation_type in (0,4,5)
;
(с вьюхами НЕ работает! Там вообще не поймёшь, откудова он длину полей берёт... :))
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Как узнать тип поля sql-запросом
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]