Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Преобразование даты / 25 сообщений из 32, страница 1 из 2
01.02.2015, 11:04
    #38868668
SAN_01_08
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование даты
FB 2.5, IBExpert, IBX.

В таблицах поля, содержащие дату, определены как: "DT DATE,"

В результате запроса select dt from tbl дата показывается в формате dd.mm.yyyy. Что в IBExpert, что на клиенте (IBX в Дельфи).
Еще есть представление, в котором участвует эта же таблица. Выдранная из таблицы представлением дата при запросе к нему (select * from view1) показывается в формате yyyy-mm-dd. Также, что в IBExpert, что на клиенте.
ХП для разных таблиц и дат вытаскивает дату в том же самом формате: yyyy-mm-dd.

Любопытно, отчего так?
И второе - как бы преобразовать из формата yyyy-mm-dd в формат dd.mm.yyyy на сервере?
Сейчас преобразование выглядит так (в ХП, например):
Код: plsql
1.
2.
    stdt = cast(:dt as varchar(10)); 
    stdt = RIGHT(stdt, 2)||'.'||SUBSTRING(stdt FROM 6 FOR 2)||'.'||SUBSTRING(stdt FROM 1 FOR 4);


А попроще нельзя ли?
...
Рейтинг: 0 / 0
01.02.2015, 11:25
    #38868674
m7m
m7m
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование даты
SAN_01_08FB 2.5, IBExpert, IBX.

Выдранная из таблицы представлением дата при запросе к нему (select * from view1) показывается в формате yyyy-mm-dd.
..........
Любопытно, отчего так?

Ну наверное кастится к строке
...
Рейтинг: 0 / 0
01.02.2015, 11:37
    #38868679
SAN_01_08
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование даты
Да, эксперимент показал, что так, но чего бы ему не кастится в другом формате?
...
Рейтинг: 0 / 0
01.02.2015, 11:55
    #38868683
miwaonline
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование даты
SAN_01_08А попроще нельзя ли?
Отображение данных - задача клиента, а не сервера. Как твои разные клиенты отображают дату - это вопрос к их создателям и настройкам ОС, но никак не к серверу. Соответственно, преобразовывать дату из формата в формат на сервере - тоже не самая лучшая идея.
...
Рейтинг: 0 / 0
01.02.2015, 12:04
    #38868684
SAN_01_08
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование даты
Что клиент должен отвечать за отображение я понимаю, но вопрос больше о том, есть ли встроенная функция в сервере, с помощью которой можно преобразовать дату из одного формата в другой.
Есть, к примеру, запрос, где нужно сформировать составное поле из даты и наименования.
Для такой ситуации и пригодилась бы такая функция.
Получить в запросе значение не "2014-11-01, Якутск", а "01.11.2014, Якутск".
...
Рейтинг: 0 / 0
01.02.2015, 12:07
    #38868685
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование даты
SAN_01_08Есть, к примеру, запрос, где нужно сформировать составное поле из даты и
наименования.
Не нужно. Сделать из двух полей одно это тоже задача клиента.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
01.02.2015, 12:33
    #38868694
SAN_01_08
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование даты
Вам, наверное, было не нужно, а мне как раз надо.
Да и с каких пор составные поля в результатах запроса стало криминалом? (или всегда было, а я пропустил?)
Еще ситуация, в которой я бы не отказался от серверной функции преобразования даты (в строковом представлении, разумеется) из одного формата в другой, это когда на клиенте, в гриде в одной и той же колонке нужно отображать текстовое значение или дату в зависимости от условий в строке.
Но уже понятно, что функция такая из области фантазий.
Да ладно, через ХП можно.
...
Рейтинг: 0 / 0
01.02.2015, 13:09
    #38868705
zeon11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование даты
SAN_01_08,

10793328
...
Рейтинг: 0 / 0
02.02.2015, 12:51
    #38869376
kdv
kdv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование даты
SAN_01_08) из одного формата в другой
на клиенте дата отображается в том формате, который задан в настройках системы на конкретном компьютере.
Уж сколько раз писали, что преобразование даты на сервере к какому-то жесткому формату может вызвать проблемы с интерпретацией этой даты на клиенте.
...
Рейтинг: 0 / 0
02.02.2015, 13:33
    #38869452
goldmi45
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование даты
SAN_01_08Для такой ситуации и пригодилась бы такая функция.
Получить в запросе значение не "2014-11-01, Якутск", а "01.11.2014, Якутск".

А если мне на клиенте понадобится совсем другой формат даты? С какого-то момента изменились требования у заказчика, к примеру. И мне придётся все старые записи обновлять, конвертируя из одного формата в другой на сервере, что не есть хорошо. Итог: это должны быть разные поля: дата и строка.
...
Рейтинг: 0 / 0
02.02.2015, 14:36
    #38869530
SAN_01_08
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование даты
Насчет "итога" никак не соглашусь. Предложение более чем странное.
Речь в теме идет не о способах хранения даты в базе, а отображении ее в удобоваримом для юзера виде. И только лишь.
А это можно сделать где угодно (на сервере или на клиенте) и в каком угодно формате.
Что касается изменений требований у заказчика (потребуется другой формат даты, к примеру), то в этом случае все равно придется переделывать: либо приложение, либо структуру в базе (ХП ли), либо то и другое.
Чем здесь поможет ваше предложение "иметь два поля"? Переделывать все равно придется.
...
Рейтинг: 0 / 0
02.02.2015, 14:55
    #38869559
goldmi45
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование даты
SAN_01_08,

да, придётся. Только трудоёмкость будет разной. В случае отдельного хранения даты на сервере, мне не нужно преобразовывать старые значения полей в новые, просто на клиенте написать преобразование в новый формат.
Сортировка, ключ и индекс по полю типа дата будет совсем другой (гораздо легче), чем в случае составного поля.
Вообще, это моё личное мнение, я стараюсь не изменять данные в базе, потому как не я ввёл эти данные.
...
Рейтинг: 0 / 0
02.02.2015, 14:59
    #38869563
goldmi45
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование даты
SAN_01_08,

и вам уже ответили, что отображение данных - это задача клиента. Со своей стороны я понял, что вы дату собираетесь хранить в строковом виде. Если был не прав, прощу прощения.
...
Рейтинг: 0 / 0
02.02.2015, 15:01
    #38869566
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование даты
SAN_01_08Речь в теме идет не о способах хранения даты в базе, а отображении ее в
удобоваримом для юзера виде. И только лишь.
А это можно сделать где угодно (на сервере или на клиенте) и в каком угодно формате.
Нет. Во-первых, на сервере пользователя нет, как нет и средств отображения. Во-вторых,
"какой угодно формат" не прокатит - пользователь определил формат в котором хочет
видеть данные при настройке своей системы. На сервере этой информации нет.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
02.02.2015, 15:03
    #38869568
m7m
m7m
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование даты
goldmi45SAN_01_08,
да, придётся. Только трудоёмкость будет разной. В случае отдельного хранения даты на сервере, мне не нужно преобразовывать старые значения полей в новые, просто на клиенте написать преобразование в новый формат.
Сортировка, ключ и индекс по полю типа дата будет совсем другой (гораздо легче), чем в случае составного поля.
Вообще, это моё личное мнение, я стараюсь не изменять данные в базе, потому как не я ввёл эти данные.

А что кто-то говорил, что дата не хранится отдельно,
или речь шла о сортировке, индексах????

зы. по поводу
"просто на клиенте написать преобразование в новый формат"
точно так-же просто
на сервере написать преобразование в новый формат
(что для меня намного удобнее, но это моё личное мнение)
...
Рейтинг: 0 / 0
02.02.2015, 15:27
    #38869586
miwaonline
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование даты
SAN_01_08Что клиент должен отвечать за отображение я понимаю, но вопрос больше о том, есть ли встроенная функция в сервере, с помощью которой можно преобразовать дату из одного формата в другой.
Есть, к примеру, запрос, где нужно сформировать составное поле из даты и наименования.
Для такой ситуации и пригодилась бы такая функция.
Получить в запросе значение не "2014-11-01, Якутск", а "01.11.2014, Якутск".

Чтобы не толочь воду в ступе. Встроенной функции Format в FB на данный момент нет (как минимум до версий 2.5.Х; насчет 3.0 не в курсе). Если очень надо - можно написать свою UDF, или поискать подходящую из уже существующих. При большом желании можно даже процедуру написать.
...
Рейтинг: 0 / 0
02.02.2015, 15:35
    #38869591
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование даты
miwaonline,

в 3.0 тоже нет
...
Рейтинг: 0 / 0
02.02.2015, 15:47
    #38869597
miwaonline
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование даты
Симонов Денис,

Я подозревал это, но поскольку c 3.0 еще не работал плотно, а здесь ты о новых встроенных функциях вообще не упоминал (что не значит что их нет), то решил вставить ремарку.
...
Рейтинг: 0 / 0
02.02.2015, 16:06
    #38869621
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование даты
miwaonline,

Там изменений по большому счёту два:
1. Функция SUBSTRING может работать с регулярными выражениями. Это описано.
2. Появились гиперболические тригонометрические и обратные от них функции. Это не описано ввиду малозначимости. В LR будет конечно.

Но в FB3 можно написать свою PSQL функцию для форматирования, хотя она будет работать медленней чем UDF/UDR.
...
Рейтинг: 0 / 0
02.02.2015, 17:18
    #38869693
afgm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование даты
miwaonlineПри большом желании можно даже процедуру написать.
При этом важный момент, что процедуру можно делать не универсальной. Количество форматов для даты/времени порядка 20 может вполне хватить. Жёстко вбить в код через if-ы и ошибка в случае промаха. Уже кучу лет так работает.
В 3.0 только вызов будет в стиле функции лаконичнее и проще.
...
Рейтинг: 0 / 0
02.02.2015, 18:57
    #38869784
miwaonline
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование даты
Симонов ДенисТам изменений по большому счёту два
Понятно, спасибо.

afgmПри этом важный момент, что процедуру можно делать не универсальной. Количество форматов для даты/времени порядка 20 может вполне хватить. Жёстко вбить в код через if-ы и ошибка в случае промаха.
+1
...
Рейтинг: 0 / 0
02.02.2015, 21:11
    #38869849
SAN_01_08
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование даты
Ну да, количество форматов дат ограничено по определению. 20-ти вполне хватит за глаза, особенно для моноязычных приложений.
Но тема, скорее, поднята про возможности сервера.
К примеру, в MS SQL Server есть такая фича в виде дополнительного параметра к преобразователю:
convert(varchar, Date_Fact, 104)
"104" или другое какое число как раз и управляет выходным форматом даты.
Была этакая призрачная надежда, что и разработчики FB в эту сторону взглянут.
Ну, на "нет" и суда нет. Беда мизерная - другие возможности имеются.
...
Рейтинг: 0 / 0
02.02.2015, 21:56
    #38869881
kdv
kdv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование даты
SAN_01_08Ну да, количество форматов дат ограничено по определению. 20-ти вполне хватит за глаза, особенно для моноязычных приложений.
вы это, адекватны?
если дата хранится на сервере как дата, то, допустим, одно и то же приложение, запущенное на двух компьютерах, с разными форматами данных в системе, покажут одну и ту же дату например как
dd.mm.yyyy
mm/dd/yyyy
и никаких проблем при этом у приложений не будет. Вы вообще в настройки системы на тему даты заглядывали хоть раз?

О чем вам и говорят, что форматирование дату в строку на сервере, в фиксированный формат (любой), ведет лишь к проблемам на клиенте, и ни к чему более.
...
Рейтинг: 0 / 0
02.02.2015, 21:57
    #38869883
kdv
kdv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование даты
SAN_01_08,

я еще добавлю - уже сколько лет известна эта "проблема", но тем не менее люди все продолжают наступать на эти грабли, причем их упорство в этом просто удивительно.
...
Рейтинг: 0 / 0
02.02.2015, 22:37
    #38869900
SAN_01_08
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование даты
авторформатирование дату в строку на сервере, в фиксированный формат (любой), ведет лишь к проблемам на клиенте, и ни к чему более.
Думаю, вы немного погорячились. Для меня в этом отношении на клиенте никаких проблем никогда не возникало.
Зачем мне глядеть в настройки ОСи, если я вывожу дату так как мне (клиенту) надо, а не так как настроены региональные стандрты.
На них положись, так в иной ситуации костей не соберешь.
Да, я всегда преобразовываю дату в клиентском приложении и по-другому никогда не делал, но понадобилось в очень специфической ситуации заставить это сделать сервер.
Здесь, по правде, говорить то не о чем. Надо было лишь узнать есть такая функция в FB сервере; а нет, ну и бог с ней.
...
Рейтинг: 0 / 0
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Преобразование даты / 25 сообщений из 32, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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