2013-11-18 9 views
2

Я хочу преобразовать дату и время в определенный формат. Преобразование должно приводить к переменной типа datetime, а не char или varchar. Как это сделать на SQL Server 2000, 2005 и 2008?Преобразование даты и времени в определенный формат?

select CONVERT(varchar(30),getdate(),120) 

Я пробовал это, но он дает мне строку. Я хочу время datetime без миллисекунд. У SS 2012 есть опция для этого, но не для предыдущих версий.

http://blog.sqlauthority.com/2012/11/21/sql-server-display-datetime-in-specific-format-sql-in-sixty-seconds-033-video/

+1

Это дает вам кучу встроенных (и рассчитанных) форматов даты, а также примеры каждого из них: http://www.sql-server-helper.com/tips/date-formats.aspx – valverij

ответ

2

Вы не можете иметь это в обоих направлениях ... переменная типа «DateTime» определяется как:

Defines a date that is combined with a time of day 
with fractional seconds that is based on a 24-hour clock 

Вы можете конвертировать и DISPLAY в любой формат, который вы выбрали, но тип данных даты и времени всегда будет иметь миллисекунды, даже если вы установите их к нулю ,

1

Вы можете удалить миллисекунды из DateTime как это:

DATEADD(ms, -DATEPART(ms, date), date) > '2013-11-18 03:21:52' 

Также проверьте SQL Server Date Formats

или может быть попробовать, как это удалить миллисекунды часть: -

declare @str datetime 
set @str = '2013-11-18 17:24:05.784' 
select convert(datetime, convert(char(19), @str, 126)) 
+0

не работает для меня. Я попробовал выбрать DATEADD (MILLISECOND, -DATEPART (MILLISECOND, getdate()), getdate()) и получил миллисекунды в результате. – Steam

+0

@blasto: - Я обновил свой ответ. Надеюсь, это сработает для вас! –

+0

Спасибо, что помогли мне. Но отредактированный код также показывает миллисекунду. Я думаю, BWS прав. Независимо от того, что вы делаете, SQL-сервер добавит миллисекундную часть .000 в datetime. У вас не может быть этого в обоих направлениях – Steam

Смежные вопросы