Форум: "Базы";
Текущий архив: 2004.02.25;
Скачать: [xml.tar.bz2];
ВнизПеревод Даты в Строку Найти похожие ветки
← →
BanderLog (2004-01-30 11:42) [0]Привет Мастерам. Подскажите пожалуйста как внутри запроса сформировать строку. Точнее как я знаю, но не знаю как перевести дату в строку в нужном мне виде. По умолчию получается 2004-04-10,а хотелось бы 10.04.2004. (На FB1.5)
← →
Deniz (2004-01-30 11:57) [1]Для FB1.5:
select extract(day from DateField) || "." ||
extract(month from DateField) || "." ||
extract(year from DateField)
from Table
но есть некоторые нюансы
← →
BanderLog (2004-01-30 12:02) [2]Пасибы, но это экстренный вариант (хотя про него совсем забыл :(). Хотелось бы на счёт нюансов чуток поподробнее, а то сегодня часа 2 потерял пока с Case"ом разобрался. :(
← →
ermserg (2004-01-30 12:20) [3]Formatting dates in SQL Server as MM/DD/YYYY:
SELECT CONVERT( VARCHAR(20), yourdatecol, 101 )
For any other formats, replace 101 by:
Without century (yy) With century (yyyy)
Standard
Input/Output**
- 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
← →
Deniz (2004-01-30 12:31) [4]> Хотелось бы на счёт нюансов чуток поподробнее
При DateField is null у меня extract ругается :( да и сторка для твоего примера "2004-04-10" будет "10.4.2004" тоже не есть гуд :(
UDF спасет отца русской демократии на 100%
← →
BanderLog (2004-01-30 12:32) [5]Что то в FB я не видел такой функции. Да и в IB тоже. :(
В общем нет такой. :(
← →
BanderLog (2004-01-30 12:36) [6]2Deniz: В смысле UDF спасёт, есть готовая где-то? (с 4 вместо 04 уже накололся :) а формат задан жёстко). Что-то не очень хоца самому писать сию функцию скорее всего состоящую в итоге из одного DateTimeToStr :).
← →
Deniz (2004-01-30 13:16) [7]> BanderLog © (30.01.04 12:32) [5]
> Что то в FB я не видел такой функции. Да и в IB тоже. :(
> В общем нет такой. :(
Скорее всего ermserg © (30.01.04 12:20) [3] думал о своем(MSSQL), когда писал сиё творение!
> BanderLog © (30.01.04 12:36) [6]
> -то не очень хоца самому писать сию функцию скорее всего состоящую в итоге из одного DateTimeToStr :).
Скорее всего есть она где-то. А вот с "4" вместо "04", в стандарт поставки FB входит ib_udf.dll там есть lpad
/*****************************************
*
* l p a d
*
*****************************************
*
* Functional description:
* Appends the given character to beginning
* of the input string until length of the result
* string becomes equal to the given number.
* Note: This function is NOT limited to
* receiving and returning only 80 characters,
* rather, it can use as long as 32767
* characters which is the limit on an
* INTERBASE character string.
*
*****************************************/
DECLARE EXTERNAL FUNCTION lpad
CSTRING(80), INTEGER, CSTRING(1)
RETURNS CSTRING(80) FREE_IT
ENTRY_POINT "IB_UDF_lpad" MODULE_NAME "ib_udf";
Ну можно в ХП это все оформить, тогда все получится :)
Вот только вопрос, зачем это так "жестко" надо? Может можно на клиенте отрегулировать?
← →
BanderLog (2004-02-02 06:47) [8]>Скорее всего ermserg © (30.01.04 12:20) [3] думал о своем(MSSQL), когда писал сиё творение!
Скорее всего :)
За LPad спасибы, то что надо, а вот с клиентом поподробнее. Я то думал что при конверте FB будет брать настройки формата даты из винды, но увы, видать не берёт. Может и можно настроить представление для сервера, но где?
← →
Deniz (2004-02-02 08:50) [9]> BanderLog © (02.02.04 06:47) [8]
>а вот с клиентом поподробнее
Все дело в волшебных пузырьках :))
Что бы выбрать информацию из БД(причем любой) нужно написать маленькую программу, которая называется клиентом и делает примерно сл-щее:
1. Подключается к БД.
2. Запрашивает данные.
3. Получает запрошенные данные
4. Показывает их пользователю.
5. Обрабатывает данные.
...
N. Отключается от БД.
Так вот в пункте 4 можно переформатировать вывод ЛЮБОГО поля!
Для примера в программе-клиенте:
Query1.SQL.Text:="select * from MyTable";
Query1.Open;
...
for i:=0 to Query1.FieldCount-1 do begin
if (Query1.Fields[i] is TDateField) then
begin
(Query1.Fields[i] as TDateField).DisplayFormat:="dd/mm/yyyy, dddd";
(Query1.Fields[i] as TDateField).DisplayWidth:=30;
end;
end;
Все датовые поля будут отображаться примерно так:
06.02.2004, пятница
← →
BanderLog (2004-02-03 07:17) [10]Я конечно балбес но не настолько. :)
Весь прикол в том, что запрос выполняется на сервере и сам внутри себя переводит дату в строку, так что к клиенту это не имеет никакого отношения, потому как к нему попадает уже сформированния строка. :)
Я думал что сервер будет брать виндовые настройки формата даты для конверта, ан нет, что то свое. Мож в нём где то настроить можно?
PS: Ну в общем то я сделал все уже через LPad, но для общего обращования хотелось бы разобраться получше. %)
Всем пасибы за терпение. :о)
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2004.02.25;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.031 c