Sql конвертировать формат даты - PullRequest
1 голос
/ 25 февраля 2011

Я хочу преобразовать формат даты из мм / дд / гггг в гггг / мм / дд.Я хочу вывод в формате datetime.Я пытался это

преобразовать (datetime, convert (varchar, getdate (), 111), 123)

, но не работает.Ошибка «явное преобразование в дату и время недоступно». Как лучше всего решить эту проблему?Я использую Sybase.

Ответы [ 4 ]

3 голосов
/ 25 февраля 2011

Попробуйте это

выберите конвертировать (varchar, CAST ('12 / 11/2010 'как DateTime), 111)

1 голос
/ 25 февраля 2011

Форматирование - это то, что должно выполняться на уровне представления, а не на уровне данных. Однако большинство поставщиков, таких как Sybase, предоставляют возможность элементарного форматирования:

Select Cast( Year(GetDate()) As char(4)  )
    + '/' + Right( '00' + Cast( Month(GetDate()) As varchar(2) ), 2 )
    + '/' + Right( '00' + Cast( Day(GetDate()) As varchar(2) ), 2 ) 
1 голос
/ 25 февраля 2011

Это не сработает. Тип данных DATETIME имеет свой собственный формат, который на самом деле представляет собой количество времени, прошедшее с фиксированной контрольной даты; если вы запрашиваете DATETIME, он всегда будет возвращен в соответствии с этим форматом.

Как это отображается для конечного пользователя, является функцией клиента. Вы можете использовать CONVERT, чтобы преобразовать его в строку и указать формат для отображения в строке, но затем вы возвращаете строку, а не DATETIME. Вы можете вернуть его как DATETIME (который не имеет собственного формата отображения), а затем клиентское приложение или ОС должны определить, как он отформатирован для отображения. В клиентских приложениях у вас также обычно есть функции форматирования, которые отображают дату / время в соответствии с указанным вами форматом. И если вы не указали это явно в приложении, то отображение даты / времени обычно определяется настройками локализации в ОС.

По сути, существует разница между типом данных - DATETIME - и его представлением конечным пользователям.

0 голосов
/ 25 февраля 2011

Попробуйте этот запрос

select (CONVERT(varchar(10), GETDATE(), 120))
...