Форум: "Базы";
Текущий архив: 2004.03.14;
Скачать: [xml.tar.bz2];
Внизприведение типов в SQL Найти похожие ветки
← →
3APA3A (2004-02-11 11:38) [0]Суть: есть Paradox"овская таблица типа (d int,m int,y int). Доступ через BDE. Надо с DBGrid вывести все эти числа в один столбец по такому принципу a+"/"+b+"/"+c (наподобие даты). BDE ругается когда я пишу "select a+"/"+b+"/"+c from ...", говорит типы несовместимы. Оно то понятно, но
1)как выбрать
2)какое fieldname дать Columns"у в DBGrid"е чтобы он это отображал?
← →
DenK_vrtz (2004-02-11 11:40) [1]String concatenation - ||
← →
Кщд (2004-02-11 11:41) [2]конкатенация - ||
← →
Silver Alex (2004-02-11 11:42) [3]Calculeted Field или на OnGetText выводить чего надо
← →
Academic (2004-02-11 11:43) [4]
> 2)какое fieldname дать Columns"у в DBGrid"е чтобы он это
> отображал?
Ну можно что-нибудь наподобие
"Результат моих творческих изысканий на 11.02.04г."
← →
Johnmen (2004-02-11 11:44) [5]select ...||...||... as fieldname from ...
← →
3APA3A (2004-02-11 11:48) [6]to DenK_vrtz
то есть так
select a||"/"||b||"/"||c from...
я правильно понял?
to Academic
я спросил про DBGrid.Columns.FieldName а на DBGrid.Columns.Caption...Читайте внимательней...
to Silver Alex
а как через Calculated Fields?
← →
3APA3A (2004-02-11 11:49) [7]to Johnmen
спасибо....все ясно...
← →
Academic (2004-02-11 11:51) [8]
> я спросил про DBGrid.Columns.FieldName а на DBGrid.Columns.Caption...Читайте
> внимательней...
Назвать выводимое поле можно как хочется даже в запросе.
как это делается
> Johnmen © (11.02.04 11:44)
И не стоит обвинять в невнимательности отвечающих. Нужно поискать в чем был невнимателен сам.
← →
3APA3A (2004-02-11 11:53) [9]ну вот ты бы написал, как это делается, и претензий к тебе не было бы...
← →
Sandman25 (2004-02-11 11:56) [10][9] 3APA3A © (11.02.04 11:53)
Academic четко ответил на вопрос 2) из первого поста. Если не умеете задавать вопросы правильно, учитесь этому. И не нужно обижаться, если виноваты только сами.
← →
3APA3A (2004-02-11 12:04) [11]никто и не обижается
но дело в другом
я пишу вот так select a||"/"||b||"/"||c as field1 from...
а BDE пишет "type mismatch in expression" Как правильно сформировать запрос?
← →
Sandman25 (2004-02-11 12:06) [12]Кавычки должны быть одинарные.
← →
3APA3A (2004-02-11 12:10) [13]ТАк и с одинарными тоже самое выдает
в Delphi пишу
select a||""/""||b||""/""||c as ....
тоже ругается...
← →
Sandman25 (2004-02-11 12:11) [14]Вы сделали поля в дизайнере? Тогда сделайте данное поле заново (удалите, потом Add All Fields)
← →
Sandman25 (2004-02-11 12:13) [15]Вы это поле указали как Date? Тогда нужно
cast ((a||"/"||b||"/"||c) as date) as fieldname
Причем, чтобы в BDE в качестве разделителя даты был настроен именно символ /
← →
Alex_Bredin (2004-02-11 12:18) [16]ежу понятно, что числовые поля со строками не складывают
← →
Alex_Bredin (2004-02-11 12:19) [17]и + от || ничем не отличен
← →
Sandman25 (2004-02-11 12:21) [18][16] Alex_Bredin © (11.02.04 12:18)
Точно.
cast(a as char(2)) и т.д.
← →
Sandman25 (2004-02-11 12:22) [19]Но это нужно только в LocalSQL. В SQL СУБД числа конкатенируют без проблем :)
← →
Alex_Bredin (2004-02-11 12:26) [20]
> В SQL СУБД числа конкатенируют без проблем :)
интересно...
я в этом не силен.,но Вы хотите сказать что явное приведение типов не требуется - автоматом в строку?
← →
Sandman25 (2004-02-11 12:29) [21][20] Alex_Bredin © (11.02.04 12:26)
Ага. В Informix точно работает. Я поэтому и забыл по привычке :)
ЗЫ. Работает даже select dec(13,3)||int||date||(datetime year to minute)
← →
3APA3A (2004-02-11 12:31) [22]Все.... разобрался...Все работает....
Тольуо еще вопрос возник один - можно или нет сделать так, что бы если поле (a int) состоит из 1 цифры - к нему прибавлялся 0 слева, а если из 2-х - то ничего не делалось... Все это должно быть в запросе разумеется...
← →
Alex_Bredin (2004-02-11 12:32) [23]2 Sandman25
спасибо за полезную информацию :)
← →
Alex_Bredin (2004-02-11 12:36) [24]select "0"+cast(a as char(1))
where a<10
union
select cast(a as char(2))
where a>=10
← →
Alex_Bredin (2004-02-11 12:38) [25]from не забудьте
← →
3APA3A (2004-02-11 12:43) [26]А...принцип ясен... А если мне надо, допустим, два поля так сделать, то придется писать что-то типа
select "0"+cast(a as char(1)),"0"+cast(b as char(1))
where (a<10) and (b<10)
union
select cast(a as char(2)),"0"+cast(b as char(1))
where (a>=10)and(b<10)
union
select "0"+cast(a as char(1)),cast(b as char(2))
where (a<10)and(b>=10)
union
select cast(a as char(2)),cast(b as char(2))
where (a>=10)and(b>=10)
так? или можно как-нибудь поизящней?
← →
Johnmen (2004-02-11 12:49) [27]Если поддерживается функция SUBSTRING и LEN, то можно проще.
← →
Sandman25 (2004-02-11 12:50) [28]Поизящней делается добавлением в таблицу поля типа Date, дублирующей значения a/b/c.
Тем более, что она используется в фильтрации по дате. Скажут Вам отображать данные за 10 последних дней и что Вы будете делать?
← →
Sandman25 (2004-02-11 12:51) [29]LEN не поддерживается.
← →
Alex_Bredin (2004-02-11 12:57) [30]
> 3APA3A © (11.02.04 12:43) [26]
когда возникает необходимость написания таких конструкций, имеет смысл задуматься над структурой БД, например,
> Sandman25 © (11.02.04 12:50) [28]
а скорее всего(если речь идет о датах), то изначально неправильный подход
← →
3APA3A (2004-02-11 12:57) [31]ладно... будем разбираться... всем спасибо... =)
← →
3APA3A (2004-02-11 12:59) [32]нет... речь идет не о датах...просто такой же набор чисел
два двузначных и одно четырехзначное.... а хочется их в одно поле засунуть, отсюда и извращения такие....
← →
Sandman25 (2004-02-11 13:00) [33][30] Alex_Bredin © (11.02.04 12:57)
Знаю :)
Я и сам долго ругался, когда понял, что мне кроме даты придется записывать в таблицу еще и год, и месяц...
Дело в специфике LocalSQL.
Если нужны отчеты по годам, месяцам, то придется их хранить в БД.
select extract(month from mydate) mon, ...
from ..
group by extract(month from mydate)
(или group by 1, или group by mon)
не проходит, если используется BDE.
← →
Sandman25 (2004-02-11 13:01) [34][32] 3APA3A © (11.02.04 12:59)
Ну так и засовывайте.
Делаете поле CHAR(10) и вперед :)
← →
3APA3A (2004-02-11 20:10) [35]Еще одна проблема
есть, допустим в таблице такие записи
insert into ... (a) values(1);
insert into ... (a) values(1);
insert into ... (a) values(15);
insert into ... (a) values(15);
и если я пишу
select "0"+cast(a as char(1)) from ... where a<10 union
select cast(a char(2)) from ... where a>=10;
то result set будет такой
01
15
и все... то есть - дубл. записи он не выводит, а мне надо...
можно сделать, чтобы выводил все?
← →
jack128 (2004-02-11 21:48) [36]union all
← →
3APA3A (2004-02-11 22:03) [37]еще вопрос
почему вылезает ошибка type mismatch in expression (я просто пишу это в DataBase Desktop, типа тестирую..)
select "<10" from "cl" where a<10 union select "10<<100" from "cl" where a between 10 and 100 union select ">100" from "cl" where a>=100;
Что неправильного?
← →
ЮЮ (2004-02-12 03:17) [38]>3APA3A © (11.02.04 22:03) [37]
>Что неправильного?
В первом запросе первое поле Char(3), во втором - Char(7), а в третьем - Char(4), а типы полей при UNIOM, как известно, должны совпадать
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2004.03.14;
Скачать: [xml.tar.bz2];
Память: 0.52 MB
Время: 0.015 c