Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

IB 7.5 Как хр. процедуре в переменнной типа date обнулить время?


Страницы:   1 2 3 4

novill ©   (2007-01-09 16:16:00) 

сабж


Anatoly Podgoretsky   (2007-01-10 15:41:00) [21]

> try  (10.01.2007 15:35:41)  [41]

Чего не понятного?
В указаном формате отсутствует месяц, есть день недели, число месяца и год. По данной информации возможно работа только в пределах месяца, любого года, сам месяц не представляется возможным использовать.


try   (2007-01-10 15:35:00) [22]


> Anatoly Podgoretsky ©   (10.01.07 15:25) [38]
> > try  (10.01.2007 15:01:33)  [33]
> В системах с недельным/месячным циклом так можно считать.


Э-э-э. Не понял.


Anatoly Podgoretsky   (2007-01-10 15:30:00) [23]

> try  (10.01.2007 15:19:37)  [37]

> Но, тем не менее, именно так и делают. Причем "зубры" и авторитеты IB/FB/YA, о чём можно почитать на конференциях, напр. на sql.ru

Нельзя рассматривать в отрыве от конкретной ситуации, я видел подобное, так эти советы попытка почесать левое ухо правой рукой. Из-за неверного подхода к проектирования автором вопроса и тут уже ничего другого и не остается, только такие советы


Desdechado   (2007-01-10 15:30:00) [24]

Не вижу смысла в дальнейшем споре.
Я приводил в [10] методически правильныйподход. Умеющий думать да доведет его до ума, если запрос вдруг почему-то (?) не работает (у меня работает, и это не странно).
А "внутренние стандарты" - слишком скользкая штука, склонная к изменению от версии к версии. Да и не факт, что он не будет зависеть от локали сервера, клиента или их взаимосоединения.
Думаю, автор вопроса сам выберет удобный ему путь и вспомнит о дискуссии, наступив на грабли.

За сим прощаюсь.

ЗЫ "Каждый может заблуждаться, но только глупцы упорствуют в своих заблуждениях" (с) кто-то из древних греков


Anatoly Podgoretsky   (2007-01-10 15:25:00) [25]

> try  (10.01.2007 15:01:33)  [33]

В системах с недельным/месячным циклом так можно считать.


try   (2007-01-10 15:19:00) [26]


> Ega23 ©   (10.01.07 15:07) [36]
> Просто меня всего передёргивает от твоего способа приводить к строке
> (которая суть формат представления; пусть даже и внутренне-
> принятый),


Согласен, несколько необычно. Но, тем не менее, именно так и делают. Причем "зубры" и авторитеты IB/FB/YA, о чём можно почитать на конференциях, напр. на sql.ru

> а потом обратное приведение к числу.

Да не к числу, а к датновремннному типу.


Ega23   (2007-01-10 15:07:00) [27]


> Я говорил о форматах представления, а не хранения.
> Из приведённых тобой в ответ на
> > Нет общепринятых видов с запятыми.
> я вижу только 7 107 - Mon dd, yy
> Утверждать, что это общепринятый формат я бы не стал.
>


Ну правильно, представления. Я вообще свой могу придумать.
Просто меня всего передёргивает от твоего способа приводить к строке (которая суть формат представления; пусть даже и внутренне-принятый), а потом обратное приведение к числу.


Ega23   (2007-01-10 15:04:00) [28]


> Кстати, ты попробовал, что хотел?


Нет, у меня ребёнок заболел, пол-ночи с женой вокруг него прыгали. Не до того было.
А на работе у меня только MS SQL.


try   (2007-01-10 15:02:00) [29]


> Ega23 ©


Кстати, ты попробовал, что хотел?


try   (2007-01-10 15:01:00) [30]


> Ega23 ©   (10.01.07 14:50) [32]


Я говорил о форматах представления, а не хранения.
Из приведённых тобой в ответ на
> Нет общепринятыхвидов с запятыми.
я вижу только 7 107 - Mon dd ,yy
Утверждать, что это общепринятыйформат я бы не стал.


Ega23   (2007-01-10 14:50:00) [31]


> Нет общепринятых видов с запятыми.


0 or 100 (*)  Default mon dd yyyy hh:miAM (or PM)
1 101 USA mm/dd/yy
2 102 ANSI yy.mm.dd
3 103 British/French dd/mm/yy
4 104 German dd.mm.yy
5 105 Italian dd-mm-yy
6 106 - dd mon yy
7 107 - Mon dd, yy
8 108 - hh:mm:ss
- 9 or 109 (*)  Default + milliseconds mon dd yyyy hh:mi:ss:mmmAM (or PM)
10 110 USA mm-dd-yy
11 111 JAPAN yy/mm/dd
12 112 ISO yymmdd
- 13 or 113 (*)  Europe default + milliseconds dd mon yyyy hh:mm:ss:mmm(24h)
14 114 - hh:mi:ss:mmm(24h)
- 20 or 120 (*)  ODBC canonical yyyy-mm-dd hh:mi:ss(24h)
- 21 or 121 (*)  ODBC canonical (with milliseconds) yyyy-mm-dd hh:mi:ss.mmm(24h)
- 126(***) ISO8601 yyyy-mm-dd Thh:mm:ss:mmm(no spaces)
- 130* Kuwaiti dd mon yyyy hh:mi:ss:mmmAM
- 131* Kuwaiti dd/mm/yy hh:mi:ss:mmmAM

вишь, сколько дофига?
А офицальный Windows-стандарт - в целой части количество дней с 01.01.1900, а дробная - количество часов-минут-секунд-миллисекунд и т.п.
А офицальный UNIX-стандарт - количество секунд с какого-то-там-числа-196-какого-то-года.
А у Borland - в целой части количество дней с 30.12.1899, а дробная - количество часов-минут-секунд-миллисекунд и т.п.

Стандартов - дофига. Строковых - вообще дофига.


try   (2007-01-10 14:25:00) [32]


> Desdechado ©   (10.01.07 13:39) [30]
> > Подъезжай ко мне"на деревню дедушке"? Типичный отмаз при
> явном знании невыполнимости действия.


Ну слов то тебе не достаточно.


> И что же он выдает? Другой результат? Ошибку? Слова, всё
> слова...


Тебе звуки нужны или тактильные ощущения? Или что?
Вот ещё немного слов, свеженьких, результат выполнения [10]:
2007-01-10 14:04:00.000для текущей даты и времени 14:04:44
Т.е. видим, что вычитаемые в выражении запроса [10] не сильно повлияли на уменьшаемое. Почему? Потому, что выполняется неявное преобразование типов вычитаемых. А именно к типу integer, что при указанном делении даёт ноль для часов и минут. Хорошо, исправим эту твою ошибку. напишем 24.0 и 60.0 Что получаем? Вот это: 2007-01-10 2:07:00.000для текущей даты и времени 14:07:06.
А ты смеешь утверждать (слова, всё слова), что время должно получаться 00:00:00.000.


> Я аргументы привожу здесь в отличие от некоторых, которые
> прячутся за словами "сам дурак" и "сам найдешь".


Это здесь твои аргументы?

Desdechado ©   (09.01.07 17:58) [11]
Desdechado ©   (09.01.07 20:57) [24]

К вопросу о прятании за словами.


> 1. И что это за документ?
> 2. Где там сказано, что это стандарт, раз приведено еще куча разных возможностей?
> 3. Кстати, про запятые там ни слова, хотя они тоже работают. И про комбинации знаков-разделителей, о которых я писал. Хотя работают весьма
своеобразно.


1. Это Release Notes InterBase 7.5 написанный и опубликованный Borland.
2. Эта куча строго описана и конечна. Является стандартом, определённым официальным документом.
3. Естественно. Нет общепринятых видов с запятыми. И Borland не обязан их поддерживать и документировать. А если они как-то работают, то это побочное недокументированное явление.


Desdechado   (2007-01-10 13:39:00) [33]

> Подъезжай ко мне
"на деревню дедушке"? Типичный отмаз при явном знании невыполнимости действия.

> указанного тобою результата не выдаёт
И что же он выдает? Другой результат? Ошибку? Слова, всё слова...

> Позволяет только безаргументно наезжать.
Я аргументы привожу здесь в отличие от некоторых, которые прячутся за словами "сам дурак" и "сам найдешь".

> Специально для тебя (обращаю внимание на выделенный фрагмент):
1. И что это за документ?
2. Где там сказано, что это стандарт, раз приведено еще куча разных возможностей?
3. Кстати, про запятые там ни слова, хотя они тоже работают. И про комбинации знаков-разделителей, о которых я писал. Хотя работают весьма своеобразно.

Обрати также внимание на результат обратного порядка:
select CAST(EXTRACT(YEAR FROM cast('now' as timestamp))||'.'
         ||EXTRACT(MONTH FROM cast('now' as timestamp))||'.'
         ||EXTRACT(DAY FROM cast('now' as timestamp)) AS timestamp)
from rdb$database


try   (2007-01-10 13:20:00) [34]


> Desdechado ©   (10.01.07 11:18) [28]
> Не вижу доводов.


Подъезжай ко мне, я тебе покажу, что твой запрос, выполненный под IB 7.5 c БД в 3 диалекте указанного тобою результата не выдаёт. Отсюда я делаю вывод, что ты лжешь.


> B снова голословно. "Стандарт" должен быть документирован.
>  Жду ссылку или цитату из официальной документации.


Ну понятное дело, ЧСВ не позволяет тебе заглянуть в документацию. Позволяет только безаргументно наезжать.
Специально для тебя (обращаю внимание на выделенный фрагмент):

Casting a string to a date now permits strings of the form:
'yyyy-mm-dd' 'yyyy/mm/dd' 'yyyy mm dd'
'yyyy:mm:dd' 'yyyy.mm.dd'

In all of the forms above, you can substitute a month name or 3-letter abbreviation in
English for the 2-digit numeric month. However, the order must always be 4-digit year, then month, then day.

In previous versions of InterBase, you could enter date strings in a number of forms, including ones that had only two digits for the year. Those forms are still available in InterBase 7.5. If you enter a date with only two digits for the year, InterBase uses its "sliding window" algorithm to assign a century to the years.
The following forms were available in earlier versions of InterBase and are still permitted in InterBase 7.5:
'mm-dd-yy' 'mm-dd-yyyy' 'mm/dd/yy' 'mm/dd/yyyy'
'mm dd yy' 'mm dd yyyy' 'mm:dd:yy' 'mm:dd:yyyy'
'dd.mm.yy' 'dd.mm.yyyy'


Desdechado   (2007-01-10 11:18:00) [35]

try ©   (09.01.07 22:47) [27]
> Это наглая ложь.
Не вижу доводов. За базар отвечать надо. А то можно и в бубен.

> Я же утверждал и продолжаю утверждать
B снова голословно. "Стандарт" должен быть документирован. Жду ссылку или цитату из официальной документации.


try   (2007-01-09 22:47:00) [36]


> Desdechado ©   (09.01.07 22:25) [26]
> запросselect cast( 'now' as TIMESTAMP ) -       extract(
> hour   FROM cast( 'now' as timestamp ) )/24 -       extract(
> minute FROM cast( 'now' as timestamp ) )/24/60 -       extract(
> second FROM cast( 'now' as timestamp ) )/24/60/60from rdb$database возвращает
> 09.01.2007  0:00:00


Это наглая ложь.


> Продолжить комбинировать можешь сам.


Комбинировать начал ты, тебе и продолжать.
Я же утверждал и продолжаю утверждать, что ИБшном стандарте представления даты вида день.месяц.год используются ТОЧКИ и ТОЛЬКО ТОЧКИ. Никакой зависимости этого формата от региональных настроек НЕТ и НЕ БЫЛО.


Desdechado   (2007-01-09 22:25:00) [37]

запрос
select cast( 'now' as TIMESTAMP ) -
      extract( hour   FROM cast( 'now' as timestamp ) )/24 -
      extract( minute FROM cast( 'now' as timestamp ) )/24/60 -
      extract( second FROM cast( 'now' as timestamp ) )/24/60/60
from rdb$database

возвращает 09.01.2007  0:00:00

Запросы с минусами, запятыми и слэшами - вообще винегрет:
1. select CAST(EXTRACT(DAY FROM cast('now' as timestamp))|| '/'
         ||EXTRACT(MONTH FROM cast('now' as timestamp))|| '/'
         ||EXTRACT(YEAR FROM cast('now' as timestamp)) AS timestamp)
from rdb$database

дает 01.09.2007  0:00:00
2. select CAST(EXTRACT(DAY FROM cast('now' as timestamp))|| '-'
         ||EXTRACT(MONTH FROM cast('now' as timestamp))|| '-'
         ||EXTRACT(YEAR FROM cast('now' as timestamp)) AS timestamp)
from rdb$database

дает 01.09.2007  0:00:00
3. select CAST(EXTRACT(DAY FROM cast('now' as timestamp))|| ','
         ||EXTRACT(MONTH FROM cast('now' as timestamp))|| ','
         ||EXTRACT(YEAR FROM cast('now' as timestamp)) AS timestamp)
from rdb$database

дает 01.09.2007  0:00:00
4. select CAST(EXTRACT(DAY FROM cast('now' as timestamp))|| '.'
         ||EXTRACT(MONTH FROM cast('now' as timestamp))|| '/'
         ||EXTRACT(YEAR FROM cast('now' as timestamp)) AS timestamp)
from rdb$database

дает 09.01.2007  0:00:00
5. select CAST(EXTRACT(DAY FROM cast('now' as timestamp))|| '/'
         ||EXTRACT(MONTH FROM cast('now' as timestamp))|| '.'
         ||EXTRACT(YEAR FROM cast('now' as timestamp)) AS timestamp)
from rdb$database

дает 09.01.2007  0:00:00

Продолжить комбинировать можешь сам.


try   (2007-01-09 21:16:00) [38]


> Desdechado ©   (09.01.07 20:57) [24]
> try   (09.01.07 19:33) [23]
> Съехал.Собственно, как я и ожидал.


Ты о чём?

Кстати
1. Что у тебя выдаёт запрос [10] ты так и не привёл.
2. Может я как-то не так понял выражение "Ты подставь туда минус etc"? Если тебе не сложно, поясни.

А то создается впечатление, что "Ты бы попробовал сначала, ага?" (c) Desdechado © (09.01.07 17:58) [11] ты адресуешь всем, кроме себя.


Desdechado   (2007-01-09 20:57:00) [39]

try   (09.01.07 19:33) [23]
Съехал.
Собственно, как я и ожидал.


try   (2007-01-09 19:33:00) [40]


> Desdechado ©   (09.01.07 18:59) [18]
> > Кстати, у тебя ошибка в [10]
> В чем?


Неохота разбираться, в чём. Только результат выполнения запроса не соответствует ожидаемому (требуемому).


>> дело в том, что формат день.месяц.год (именно в такой
>> последовательности и именно с таким разделителем)> является
>> "внутренним стандартом" IB/FB/YAНу-ну.

>Ты подставь туда
> минус, слэш, запятую, их комбинации и разглядишь их "стандарты".
>  Может, когда-нибудь поймешь, чем чревато изменение недокументированного
> поведения "стандартов".


Во-первых, "туда" ничего подставлять не надо - указанное стандартное представление говорит только о точке, а не о минусе, слэше, запятой, их комбинации.
Во-вторых, данный стандарт документирован (для IB). Давным-давно. Достаточно открыть эту самую документацию и посмотреть.
Единственное пожелание - не надо меня просить указать № страницы, главу, раздел и имя книги документации, где это описано. Сам найдёшь :)


Страницы:   1 2 3 4

Наверх

Титульная страница Поиск, карта сайта Написать письмо