У меня есть особая ситуация, которую я не могу понять.Преобразование даты SQL Server из определенного формата в другой точный формат даты
У меня есть поле в таблице SQL, который сохраняется как DATETIME в следующем формате:
2016-11-26 00:00:00
Это все хорошо-и-хорошо, за исключением того, что мне это нужно в формате dd/MM/yyyy
.
Я не хочу использовать функцию CONVERT(VARCHAR(10), @dateField, 103)
в SQL, потому что я хочу формат DATE, а не формат STRING.
Я экспортирую результат DataTable в Excel с помощью библиотеки EPPlus, и мне нужны поля даты в экспорте в этом точном формате.
Я пробовал:
FORMAT(@dateField, 'dd/MM/yyyy', 'en-gb')
, а также литье это обратно к типу DATE. Он по-прежнему неявно преобразуется в VARCHAR или NVARCHAR.- Листинг @dateField для DATE и SMALLDATETIME
- Использование C# для его преобразования в дату в правильном формате.
DateTime.ParseExact(dataTable.Rows[i]["DateField"].ToString(), "dd/MM/yyyy", CultureInfo.InvariantCulture);
- EPPlus форматирование колонки:
workSheet.Column(19).Style.Numberformat.Format = "dd/MM/yyyy";
Я бегу из вариантов на это преобразование, потому что ни одна из моих попыток не работают в формате DateTime. Каждый путь, который я принял, преобразует мои значения обратно в строку. Любая помощь будет оценена :)
Почему вы называете 'DateTime.ParseExact'? Значение уже должно быть 'DateTime', поэтому просто добавьте его к этому и * затем * вызовите' ToString'. И если вам нужен конкретный формат, вы * * запрашиваете строку, а не значение DateTime. –
DateTime имеет ** NO ** формат. Это двоичное значение, так же как DateTime .NET или bool или десятичное. Вам ничего не нужно конвертировать. Просто используйте параметризованный запрос или ORM и передайте значения DateTime в качестве параметров DateTime. EPPlus также не нуждается в каких-либо конкретных форматах: даты в Excel используют двоичный формат OADate, а EPPlus напрямую преобразует DateTime в него. Как Excel отображает дату, зависит от конкретного стиля столбца, который * может * ввести в заблуждение –
@JonSkeet Я попробовал регулярный анализ и прямой трансляции. Параметр не изменил формат, и прямой бросок бросил InvalidCastException. Изменение типа в SQL, даже без преобразования, сохраняет значение в электронной таблице как число. Я ожидаю 22/03/2011, но значение ячейки составляет 40624 :( – GrammatonCleric