Как получить записи даты и времени в формате «дд / мм / гггг ч: м: с» С SQL server 2005?

#c# #sql-server-2005 #tsql

#c# #sql-server-2005 #tsql

Вопрос:

Я хочу получать записи с sql server 2005 в формате datetime, подобном этому «dd / mm / yyyy h: m: s»

Дата моей базы данных имеет формат datetime по умолчанию

 AttLogId int
...
DownloadLog datetime
  

Я пытаюсь получить дату и время следующим образом:

 SELECT AttLogId ,convert(varchar,DownloadLogDate,103) FROM  AttLog
ORDER BY DownloadLogDate
  

но я получаю только дату, а не время.

Комментарии:

1. Взгляните на этот пост в блоге от Анубхава Гояла. 🙂

Ответ №1:

Я предлагаю вам не пытаться получить значения в определенном строковом формате. Извлеките их как DateTime значения, а затем отформатируйте их в .Используя ЧИСТЫЙ код DateTime.ToString("dd/MM/yyyy H:m:s") .

Почти всегда стоит хранить данные в их «естественном» типе данных (здесь дата / время) как можно дольше, преобразуя в текст только тогда, когда это действительно необходимо. Итак, ваш SQL должен быть просто:

 SELECT AttLogId, DownloadLogDate FROM  AttLog
ORDER BY DownloadLogDate
  

То, как вы затем извлекаете данные, будет зависеть от того, как вы взаимодействуете с SQL (например, LINQ to SQL, используя SqlDbReader и т.д.). Но вы должны иметь возможность получить их как DateTime , а затем отформатировать локально. Это упростит тестирование, упростит отладку, даст вам больше контроля над культурными аспектами (разделители дат, возможно, указание стандартного спецификатора вместо пользовательского и т.д.).

Комментарии:

1. Помогите мне, я не могу задать вопрос, поэтому помогите мне, ошибка Такая = Извините, мы больше не принимаем вопросы от этой учетной записи. Смотрите goo.gl/C1Kwu чтобы узнать больше.

2. @JigJet12: Тогда я предлагаю вам последовать совету на этой странице.

3. @Jig12: Так у вас это не сработало? Это действительно было бы намного чище, чем преобразование в базе данных. Вам следует избегать выполнения преобразований строк раньше, чем это действительно необходимо.

4. :: Хорошо, спасибо, вы даете мне правильное предложение 🙂

Ответ №2:

это потому, что вы используете 103 , поэтому он будет выдавать только дату . если вам нужен другой формат, проверьте это: http://msdn.microsoft.com/en-us/library/ms187928.aspx

Ответ №3:

В зависимости от необходимости, вы можете попробовать это

 SELECT AttLogId , convert(varchar(10),DownloadLogDate,103)  '  '  convert(varchar(8),DownloadLogDate,108) FROM  AttLog ORDER BY DownloadLogDate 
  

Примечание: первый — для даты, а второй — для времени в H: M: S

надеюсь, это поможет вам..