Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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.013 c
8-43701
Hecz
2003-11-15 00:55
2004.03.14
canvas.pixels


7-43920
Serguar
2003-12-19 11:19
2004.03.14
Как проверить состояние (готовность) матричного принтера


14-43817
LKan
2004-02-23 07:43
2004.03.14
Оптимальный маршрут


14-43824
тихий вовочка
2004-02-22 22:15
2004.03.14
Где взять Interbase?


3-43296
hva
2004-02-11 15:30
2004.03.14
Как перехватить TClientDataSet.CommandText





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский