2013-05-30 6 views
0

У меня есть поле datetime. В этом поле текущая дата вводится вручную в таком формате:Формат даты и времени без литья varchar

30/05/2013 0.00.00 

Я бы автоматизировал этот процесс. Поэтому я попытался извлечь текущую дату из функции GETDATE() и проанализировать ее с помощью функции CONVERT(), но это работает только с использованием varchar в качестве целевого адресата, но, как я уже сказал, мне все еще нужно datetime. Что я могу сделать?

+0

Почему вы преобразования? Вставить? Или для отображения в пользовательском интерфейсе/отчете –

+1

Если вы хотите получить DateTime, вы будете получать DateTime, а не формат или wath так никогда. – Serge

ответ

3

Времена хранения хранятся в том же универсальном формате. Затем вы вытащили это обратно в свой отчет или приложение и отформатировали в соответствии с локали пользователя или соответствующим образом указанным вами форматом.

Поле datetime и/или объект не имеют формата.

Если вы хотите, чтобы вставить текущую дату в поле даты и времени (за исключением части времени), используйте следующее:

insert into [MyTable] ([DateField]) 
values (cast(floor(cast(getdate() as float)) as datetime) 

Это сбросит часы, минуты и секунды до «0»

Если вы хотите, чтобы вставить параметр даты, то вы можете использовать следующие:

cast(floor(cast(@dateParam as float)) as datetime) 

Если вы просто хотите, чтобы изменить то, как он отформатирован в наборе результатов, вы можете использовать:

SET DATEFORMAT DMY 

В верхней части вашего утверждения, то, всякий раз, когда вы применяете его как varchar, вам не нужно указывать формат.

Помните, что базы данных должны даты не форматирование, ваш интерфейс должен справиться с этим

+0

Таким образом, я мог бы напрямую вставить вывод GETDATE() и будет отображаться как формат DD/MM/YYYY h.m.s? –

+0

Он будет отображаться, однако вы вытаскиваете getdate из базы данных. Если ваш язык установлен на «английский (английский)», он будет отображаться как dd/MM/yyyy hh: mm.ss, но если он установлен на «английский», он будет отображаться как MM/dd/yyyy hh: mm .ss – KaraokeStu

+0

Это работает. Спасибо! –

0

Чтобы сохранить текущую дату без часов/минут я обычно использую это:

CONVERT(DATETIME, CONVERT(CHAR(10), GETDATE(), 102), 102) 
+0

Вы никогда не должны полагаться на даты литья на строки и обратно, так как форматы могут меняться, см. Мое решение вместо – KaraokeStu

+0

Спасибо! Я принял это альтернативное решение! – tezzo