Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Firebird-1.5 поле типа date - как сравнивать с числом? / 25 сообщений из 25, страница 1 из 1
09.03.2004, 11:20
    #32434329
Katy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Firebird-1.5 поле типа date - как сравнивать с числом?
перевожу базу данных с MsSql на Firebird
непонятно одна странность

почему не работает запрос типа
select
case when dataWork=0 then '' else
cast(EXTRACT(DAY FROM dataWork) as varchar(2))||'.'||cast(EXTRACT(MONTH FROM dataWork) as varchar(2))||'.'||cast(EXTRACT(YEAR FROM dataWork) as varchar(4)) end as strdataWork
from ....

говорит что не может 0 перевести в строку.

и вообще у меня какие-то проблеммы с датой. Ведь она надеюсь храниться как float?
так почему нельзя писать select *from ... where DataLoad=0
если переконвертить в строку тип dd.mm.yyyy то понимает
...
Рейтинг: 0 / 0
09.03.2004, 11:22
    #32434333
Kull Damned
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Firebird-1.5 поле типа date - как сравнивать с числом?
Пиши

Код: plaintext
select *from ... where case (DataLoad as double precision)= 0 


и будет тебе руль... ;))
...
Рейтинг: 0 / 0
09.03.2004, 11:23
    #32434336
Kull Damned
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Firebird-1.5 поле типа date - как сравнивать с числом?
Блин, прошу прощения.

не CASE а CAST
...
Рейтинг: 0 / 0
09.03.2004, 11:37
    #32434356
Katy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Firebird-1.5 поле типа date - как сравнивать с числом?
нету мне руля :)

Overflow occurred during data type conversion error from string '12-DEC-2003'
...
Рейтинг: 0 / 0
09.03.2004, 11:42
    #32434368
Roman Ignatiev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Firebird-1.5 поле типа date - как сравнивать с числом?
case when dataWork=0 then '' else ... Может быть, when dataWork is NULL? а то как-то странно получается, 0 - тоже вполне реальная дата
...
Рейтинг: 0 / 0
09.03.2004, 11:54
    #32434398
Katy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Firebird-1.5 поле типа date - как сравнивать с числом?
у меня поля в базе not null
я знаю что реальная. но в данном случае служебная :)
те если 0 - то и нет нечего - я понимаю что может это не совсем верно - но вообшем приемлеммо

почему не работает

select *from ... where DataLoad=3432

не работает в ibExpert и в приложение delphi
предлагает конвертнуть в строку :(
...
Рейтинг: 0 / 0
09.03.2004, 11:55
    #32434401
Kull Damned
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Firebird-1.5 поле типа date - как сравнивать с числом?
2 Katy
А datawork у тебя часом не строка? :)
Тогда рекомендую cast(cast(datawork as date) as double precision)=0
...
Рейтинг: 0 / 0
09.03.2004, 12:03
    #32434423
Katy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Firebird-1.5 поле типа date - как сравнивать с числом?
напугал :) думала вдруг и правда при переносе че нить не то случилось

CREATE TABLE TWORKORDER (
IDW INTEGER NOT NULL,
IDO INTEGER NOT NULL,
DATAWORK DATE NOT NULL,
IDTW INTEGER NOT NULL,
KCELL INTEGER NOT NULL,
FPLACE INTEGER NOT NULL,
FOK INTEGER NOT NULL,
COMMENT VARCHAR(500) CHARACTER SET NONE NOT NULL,
MONEY DOUBLE PRECISION NOT NULL,
FVISIBLE INTEGER NOT NULL,
WEIGHT INTEGER NOT NULL,
SQUARE DOUBLE PRECISION NOT NULL,
FRECAST INTEGER NOT NULL,
FEARN INTEGER NOT NULL
);

ALTER TABLE TWORKORDER ADD CONSTRAINT PK_TWORKORDER PRIMARY KEY (IDW);

select * from tworkorder where datawork=333

выдает ту ошибку которую я писала... бред какой-то... может настройки сервера какие-то нужны?
...
Рейтинг: 0 / 0
09.03.2004, 12:05
    #32434434
Katy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Firebird-1.5 поле типа date - как сравнивать с числом?
select * from tworkorder where cast(datawork as double precision)=3333

это ситуации не меняет
...
Рейтинг: 0 / 0
09.03.2004, 12:49
    #32434533
Roman Ignatiev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Firebird-1.5 поле типа date - как сравнивать с числом?
when dataWork=cast('31-DEC-1899' as DATE) then '' else ... тогда уж...
или dataWork=cast(0 as DATE)
...
Рейтинг: 0 / 0
09.03.2004, 13:17
    #32434582
Katy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Firebird-1.5 поле типа date - как сравнивать с числом?
select * from tworkorder where dataWork=cast(333 as DATE)

опять вместо 333 хочет видит строку
я просто не понимаю - если data это число типа float то почему он не понимает 333 и

select * from tworkorder where dataWork=cast('01.01.2004' as DATE)
вот такое проходит

просто после общения с MsSql - где формат даты зависит от пользователя как то неприятно дату строкой передавать :(
...
Рейтинг: 0 / 0
09.03.2004, 13:53
    #32434667
Johnmen
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Firebird-1.5 поле типа date - как сравнивать с числом?
>Kull Damned

С каких пор кастом можно преобразовывать датавременные типы к числовым и наоборот ???

...
Рейтинг: 0 / 0
09.03.2004, 13:59
    #32434689
Kull Damned
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Firebird-1.5 поле типа date - как сравнивать с числом?
Да, прогнал... Думал, что FB как и M$-SQL так умеет... %)) Что ж, тогда собственную UDF рисовать...
...
Рейтинг: 0 / 0
09.03.2004, 14:03
    #32434699
Kull Damned
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Firebird-1.5 поле типа date - как сравнивать с числом?
Да, и еще, не в тему... Johnmen, ты еще не задолбался эту картинку везде совать? Шутка повторенная n раз становится не шуткой а бредом...
...
Рейтинг: 0 / 0
09.03.2004, 14:32
    #32434768
Katy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Firebird-1.5 поле типа date - как сравнивать с числом?
извините но помоему это явный глюк.
ну не может быть что только мне понадобилось дату как число передать

или я не понимаю глобального смысла ???
...
Рейтинг: 0 / 0
09.03.2004, 14:36
    #32434783
fedd
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Firebird-1.5 поле типа date - как сравнивать с числом?
эта... а зачем к числу-то?
...
Рейтинг: 0 / 0
09.03.2004, 14:40
    #32434794
Johnmen
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Firebird-1.5 поле типа date - как сравнивать с числом?
>Kull Damned

Не, не задолбался... :) Она сама вставляется, ибо моё изображение
А вообще-то она заменяет знак и имеет тот же смысл...
...
Рейтинг: 0 / 0
09.03.2004, 14:44
    #32434805
Katy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Firebird-1.5 поле типа date - как сравнивать с числом?
потому что тип data - это число с плавающей точкой
и если на клиенте переводить в строку, то этож должно быть связанно с форматированием строки.
те например MsSql понимает строку как дату в зависимости от языковых настроек пользователя.
если переводить на клиенте - то от языковых настроек системы.

по моему гораздо логичнее использовать число....

хотя если это не мои глюки - а так и положено то и ладно - буду привыкать :)
...
Рейтинг: 0 / 0
09.03.2004, 14:44
    #32434806
Johnmen
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Firebird-1.5 поле типа date - как сравнивать с числом?
>Katy

>Сообщений: 30 извините но помоему это явный глюк.

Не извиним, т.к. не глюк :)

>ну не может быть что только мне понадобилось дату как число передать

Разложи на составные численные части и собери в какое хочешь численное значение...

>или я не понимаю глобального смысла ???

Видимо...
...
Рейтинг: 0 / 0
09.03.2004, 14:47
    #32434818
Katy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Firebird-1.5 поле типа date - как сравнивать с числом?
>>Разложи на составные численные части и собери в какое хочешь численное значение

что это означает, пример привиди пожалуйста
...
Рейтинг: 0 / 0
09.03.2004, 14:58
    #32434860
Kull Damned
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Firebird-1.5 поле типа date - как сравнивать с числом?
Katy, да напиши UDF'ку простецкую и не напрягайся... ;))
...
Рейтинг: 0 / 0
09.03.2004, 15:02
    #32434871
fedd
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Firebird-1.5 поле типа date - как сравнивать с числом?
> и если на клиенте переводить в строку, то этож должно быть связанно с форматированием строки.
те например MsSql понимает строку как дату в зависимости от языковых настроек пользователя.

ну не знаю, у нас в джаве можно указать, какую локаль использовать для преобразования даты в строку, пользовательскую или конкретную en|en, например
...
Рейтинг: 0 / 0
09.03.2004, 15:04
    #32434875
Dnico
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Firebird-1.5 поле типа date - как сравнивать с числом?
Katy
авторизвините но помоему это явный глюк.

Все очень просто: (Language Reference)

CAST( )
Converts a column from one datatype to another.

From datatype class -> To datatype class

Date -> character, varying character, timestamp
Time -> character, varying character, timestamp

ОТСЮДА СЛЕДУЕТ ТОЛЬКО ОДНО:
авторKaty, да напиши UDF'ку простецкую и не напрягайся... ;))

Best regards,
Dnico.
...
Рейтинг: 0 / 0
09.03.2004, 15:06
    #32434885
Johnmen
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Firebird-1.5 поле типа date - как сравнивать с числом?
>Katy

Получаем день, месяц и т.д. в численном выражении. Дальше всё это определнным образом суммируем по "календарному" алгоритму с учетом "нулевого" в твоем понимании года... :)

>Kull Damned
>Katy, да напиши UDF'ку простецкую и не напрягайся... ;))

Простецкой она не будет. Особенно по соглашению о передачи параметров различных типов и их преобразованию...
...
Рейтинг: 0 / 0
09.03.2004, 15:09
    #32434890
Katy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Firebird-1.5 поле типа date - как сравнивать с числом?
Kull Damned

да ладно мне вообшем к счастью с этой прогой долго возиться не придеться - просто бета версия нужна была - щас строкой уже сделала.

хотелось принцип понять. :)

в MsSql тоже можно изменить формат перед запросом
и замете я про cast не спрашивала - вопрос был в том : почему тип data (который на самом деле число) по умолчанию нормально сравниваеться со строкой - а с числом глючит. Думала мот в синтаксисе заморочка :)

ну раз так и должно быть - то и ладно.

кстате про udf - тут можно написать UDF не как внешнюю
те например в том же MsSql я могу на T-Sql написать выборку из справочника

CREATE function dbo.Client2Fio(@idClient int)
RETURNS char(255)
Begin
declare @fio char(255)
set @fio=isnull((select fio from nsiClient where idClient=@idClient), '')
return @fio
end

а потом в запрсах писать select dbo.Client2Fio(idClient) from torder
сдесь мне приходиться писать

select select fio from nsiClient where idClient=torder.idClient) from torder
и так в 20 запросах :)

Мне уже убегать нужно... Спасибо всем за помош :)
...
Рейтинг: 0 / 0
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Firebird-1.5 поле типа date - как сравнивать с числом? / 25 сообщений из 25, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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