Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2003.08.21;
Скачать: [xml.tar.bz2];

Вниз

Синхронное изменение полей типа Date   Найти похожие ветки 

 
Insider   (2003-07-24 01:30) [0]

Есть таблица, в которой нужно ижменить некоторое количество полей типа Date на некоторое количество временных единиц.
Как это можно сделать, не прибегая к чтению набора полей, его изменению и последующей записи ?
Т.Е. нечто вроде:


UPDATE TABLE1
SET
"DATEFIELD1"="DATEFIELD1"+2,
"DATEFIELD2"="DATEFIELD2"+3,
"DATEFIELD3"="DATEFIELD3"+2
WHERE
"PARAM"="param_value";


?


 
ЮЮ   (2003-07-24 02:42) [1]

Твое "нечто вроде" вполне соответствует синтаксису UPDATE, в чем проблема?


 
Insider   (2003-07-24 23:43) [2]

Проблема в том, что это не канает!!!
Выдает: Unknown token 2


 
Zacho   (2003-07-25 09:59) [3]

Ну не знаю, у меня - работает. Правда, у меня Yaffil, а в нем поддерживается взаимообратное преобразование типов DATE, TIME и TIMESTAMP в INTEGER и DOUBLE. Насколько помню, в IB 6.x DATE можно преобразовать только к CHAR, VARCHAR и TIMESTAMP. Так что, imho, используй UDF.


 
Insider   (2003-07-27 17:12) [4]

Не понял?
Можно сэмпл?
И что за Yaffil?
У меня тут такая мысля пришла в голову: а что если CAST(CAST(CAST(DATEFIELD1) AS VARCHAR) AS FLOAT + 2) AS DATE ?


 
Zacho   (2003-07-28 08:37) [5]


> Insider © (27.07.03 17:12)
> Не понял?
> Можно сэмпл?

Сэмпл чего ? На Yaffil отлично работает именно такой запрос, как ты и приводил.

> И что за Yaffil?

Один из клонов IB (а еще есть FireBird), гораздо более продвинутый по сравнению с IB6.x Подробнее см. http://yaffil.ibase.ru

> У меня тут такая мысля пришла в голову: а что если CAST(CAST(CAST(DATEFIELD1)
> AS VARCHAR) AS FLOAT + 2) AS DATE?

Так не выйдет, посмотри что вернет CAST (DATEFIELD AS VARCHAR(10)), во FLOAT это потом не преобразуется.
Но можно воспользоваться функцией EXTRACT, и сделать это в хранимой процедуре (а может, получиться и прямо в запросе), примерно так (это только для иллюстрации идей, довести до работоспособного состояния самому :) ):
DECLARE VARIABLE ADAY INTEGER;
DECLARE VARIABLE AMONTH INTEGER;
DECLARE VARIABLE AYEAR INTEGER;
begin
FOR SELECT DATEFIELD FROM ... INTO :DATEFIELD DO
BEGIN
ADAY=EXTRACT (MONTH FROM DATEFIELD);
AMONTH=EXTRACT (MONTH FROM DATEFIELD);
AYEAR=EXTRACT (YEAR FROM DATEFIELD);
ADAY=ADAY+2;
( CAST(ADAY AS CHAR(2)

> Insider © (27.07.03 17:12)
> Не понял?
> Можно сэмпл?

Сэмпл чего ? На Yaffil отлично работает именно такой запрос, как ты и приводил.

> И что за Yaffil?

Один из клонов IB (а еще есть FireBird), гораздо более продвинутый по сравнению с IB6.x Подробнее см. http://yaffil.ibase.ru

> У меня тут такая мысля пришла в голову: а что если CAST(CAST(CAST(DATEFIELD1)
> AS VARCHAR) AS FLOAT + 2) AS DATE?

Так не выйдет, посмотри что вернет CAST (DATEFIELD AS VARCHAR(10)), во FLOAT это потом не преобразуется.
Но можно воспользоваться функцией EXTRACT, и сделать это в хранимой процедуре (а может, получиться и прямо в запросе), примерно так (это только для иллюстрации идей, довести до работоспособного состояния самому :) ):
DECLARE VARIABLE ADAY INTEGER;
DECLARE VARIABLE AMONTH INTEGER;
DECLARE VARIABLE AYEAR INTEGER;
begin
FOR SELECT DATEFIELD FROM ... INTO :DATEFIELD DO
BEGIN
ADAY=EXTRACT (MONTH FROM DATEFIELD);
AMONTH=EXTRACT (MONTH FROM DATEFIELD);
AYEAR=EXTRACT (YEAR FROM DATEFIELD);
ADAY=ADAY+2;
DATEFIELD=CAST(CAST(ADAY AS CHAR(2))||"."||CAST(AMONTH AS CHAR(2))||"."CAST(AYEAR AS CHAR(4)) AS DATE)
UPDATE ... SET DATEFIELD=:DATEFIELD WHERE ..
END
END



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2003.08.21;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.008 c
4-68576
NED
2003-06-18 19:28
2003.08.21
Работа с семафорами


3-68238
Buka
2003-07-21 18:26
2003.08.21
Как установить BDE вместе с поставляемой на другую машину програм


1-68281
anri
2003-08-06 12:03
2003.08.21
Проверка на соответствие типу


14-68506
Домарощинер
2003-08-05 18:16
2003.08.21
Кто знает, какая это кодировка?


14-68447
prihod
2003-08-04 16:36
2003.08.21
!!! Инсталяхи !!!





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский