#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
надеюсь, это поможет вам..