запрос mSsql к полю datetime

mxmus

Новичок
Хочу спросить практически в тему...
MSSQL. Выборка поля типа ДатаВремя. Действительно ли в массив результата выполнения функции mssql_query возвращается именно строка?
Если так, то есть ли возможность заставить средствами SQL возвратить строку нужного формата (например, 05.07.2006-14-09).
Если нельзя, то подскажите есть ли в РНР функция для преобразования числа с плавающей точкой в ДатуВремя. Ну а потом в строку вышеупомянутого формата?
 

Фанат

oncle terrible
Команда форума
можно
в поиск
это практически единственный вопрос, который задают в этом разделе
 

mxmus

Новичок
А я уж думал, что моя лень нашла пристанище и мне все на блюдце выложат.
Хоть бы сказал, что именно можно. Первое или второе. Но если не скажешь - я не обижуть и сам поищу :)
 

vovik

Новичок
Автор оригинала: mxmus
Действительно ли в массив результата выполнения функции mssql_query возвращается именно строка?
Действительно. Почему бы не проверить самому ? И какие еще могут быть варианты ?

Если так, то есть ли возможность заставить средствами SQL возвратить строку нужного формата (например, 05.07.2006-14-09).
Есть конечно. Однако, предвидя следующий вопрос, скажу что аналога DATE_FORMAT() от MySQL здесь нет.

Если нельзя, то подскажите есть ли в РНР функция для преобразования числа с плавающей точкой в ДатуВремя.
Причем тут число с плавающей точкой - не понял ни капли.

Возможно, поможет еще такая настройка из пхп.ини:
PHP:
; Specify how datetime and datetim4 columns are returned
; On => Returns data converted to SQL server settings
; Off => Returns values as YYYY-MM-DD hh:mm:ss
;mssql.datetimeconvert = On
 

mxmus

Новичок
Автор оригинала: vovik Действительно. Почему бы не проверить самому ? И какие еще могут быть варианты ?
Да вроде как РНР автоматически пребразовывает форматы. Так почему бы ему не преобразовать и сейчас в строку самому. Но это из области бреда :)
Автор оригинала: vovik Есть конечно. Однако, предвидя следующий вопрос, скажу что аналога DATE_FORMAT() от MySQL здесь нет.
Я могу получить требуемый результат при помощи MSSQL-функции DATEPART(), но в моём случае это надо сделать пять её вызовов для каждого из шести полей времени. Как по мне, то кривовато. Должен быть более ровный способ.
Автор оригинала: vovik Причем тут число с плавающей точкой - не понял ни капли.
Ход моих мыслей таков. При помощи MSSQL-функции CONVERT(FLOAT,поле_даты_времени) я могу получить то самое число с плавающей точкой, в котором, как известно и хранится дата_время. В том же самом C++ Builder есть функции DecodeDate() и DecodeTime(), которыми запросто можно вытащить любую часть даты_времени.
Даже и не знаю, какой вариант кривее :)
Автор оригинала: vovik Возможно, поможет еще такая настройка из пхп.ини:
Я конечно мог бы поменять настройки формата даты_времени на сервере (если бы нашел где :) ), но хочется преобразовывать средствами какого-нибудь из языков (будь то MSSQL или РНР)

А что за timestamp такой. Может он мне поможет? Я читаю и никак не могу вкурить...
 

vovik

Новичок
Ну в общем суть такая.

Если на сервере (MS)
Либо CONVERT() с параметром. Там есть ряд наиболее частых форматов, описано в BOL.
Либо DATEPART() и как угодно.

Если на клиенте (PHP)
mssql.datetimeconvert = Off

И
PHP:
print date('s:i:H-m-d-y', strtotime($date_from_mssql));

Но если есть много желания, можно и ф-ю сделать для конвертации из CAST (... AS float)
Тут я могу быть не прав в деталях, абсолютной памятью не обладаю, но идея верна.

А именно:
Целая часть - число дней с 1900-01-01
Дробная часть - время с начала суток
Если дробную часть умножить на 24 - то это будет кол-во часов с начала суток. И так далее.
 

mxmus

Новичок
Я уже этому CONVERT() совал чуть ли не все форматы. А он мне в любом случае выдаёт: "5 июл 2006 1:50". Может из-за того, что Винда русская?
Так значит ты считаешь, что с DATEPART() было бы не так уж и криво?
А вот за:
"mssql.datetimeconvert = Off И print date('s:i:H-m-d-y', strtotime($date_from_mssql));"
большое человеческое спасибо. Это именно то, что мне нужно. Я просто счастлив :) Я правда через echo сделал, но это не важно. А функцию strtotime() я пробовал и ранее, но из-за того, что было установлено mssql.datetimeconvert = On дата превращалась в какую-то там 1970 года. Откуда ж функции знать в каком она формате :)

-~{}~ 05.07.06 18:07:

Насчёт числа типа float -- отпадает. Гиморно :) Да и зачем теперь...
 
Сверху