![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
IB 7.5 Как хр. процедуре в переменнной типа date обнулить время?
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). Давным-давно. Достаточно открыть эту самую документацию и посмотреть.
Единственное пожелание - не надо меня просить указать № страницы, главу, раздел и имя книги документации, где это описано. Сам найдёшь :)