Мне нужно гггг-мм-дд чч: мм: сс в SQL Server, чтобы стать гггг-мм-дд в C # - PullRequest
2 голосов
/ 23 апреля 2009

HI

Это может быть частый вопрос.

У меня есть столбец даты (InvDate) в базе данных SQL Server 2005, который имеет значение как 2009-04-23 00: 00: 00.000. Я загружаю это в набор данных. Теперь мне нужно хранить только 2009-04-23 в какой-то выходной лист Excel (я использую OleDB). Я не хочу время, даже если это просто 00: 00: 00.000.

Я пробовал CONVERT (varchar (11), InvDate, 101) и Parse.ToDateExact и Convert.ToDate.

Я не могу сделать правильный шаг.

Есть идеи?

Спасибо.

Ответы [ 7 ]

4 голосов
/ 23 апреля 2009

Если вы пишете свою дату в Excel:

Excel.Worksheet worksheet;
...
worksheet.Cells(row, column).Value = dateVar.Date; // returns the date part of dateVar
worksheet.Cells(row, column).NumberFormat = @"yyyy-mm-dd";
3 голосов
/ 23 апреля 2009

Если у вас есть данные в виде строки:

DateTime.Parse (yourDataAsAString) .ToString ( "гггг-ММ-дд")

2 голосов
/ 23 апреля 2009

Если у вас есть экземпляр члена DateTime, вы можете вызвать функцию метода ToShortDate ().

2 голосов
/ 23 апреля 2009

DateTime.Date - ваш ответ, который возвращает часть даты объекта, то есть время = 00: 00: 00.000

        DateTime date = DateTime.Now;
        Console.WriteLine("Date is " + date.Date);
0 голосов
/ 23 апреля 2009

Используйте String.Format для форматирования даты, как вы хотите, или DateTime.ToString.

Для обработки этого в SQL просто более громоздко, чем необходимо. Преобразуйте код C # перед обработкой строкового представления значения DateTime в Excel.

Или, если вы любитель приключений, вы можете задать Excel значение DateTime, а затем добавить формат в ячейку электронной таблицы Excel, чтобы правильно отобразить это значение. Это был бы самый правильный подход, так как значение все равно будет датой, также для Excel.

0 голосов
/ 23 апреля 2009

В вашем запросе SQL вы можете просто указать, что вам не нужна часть времени значения времени / даты, используя этот синтаксис:

 SELECT DATE(timedatecolumn) WHERE whatever = whatever

Если вы хотите стать действительно модным, вы можете использовать DATE_FORMAT и выводить его практически любым удобным для вас способом. Например:

SELECT DATE_FORMAT(timedatecolumn, '%W, %M %D, %Y') WHERE blah = blah

выдаст (если бы дата была сегодня):

 Thursday, April 23rd, 2009

Различные варианты форматов даты (в MySQL):

http://dev.mysql.com/doc/refman/5.0/en/date-and-time-functions.html#function_date-format

Кроме того, имейте в виду, что значение даты в Excel (если оно форматирует ее как фактическую дату, а не просто как строку) не является ФАКТИЧЕСКИ тем, что вы видите в ячейке. Это значение даты Microsoft (в основном некоторое целое число, которое соотносится с датой и временем в логике Microsoft), поэтому, если вы хотите, чтобы Excel распознал и обработал значение как дату (скажем, если вы хотите запустить функцию или формулу на основе значения старше или определенного месяца и т. д.) Вам просто нужно отформатировать столбец, чтобы не показывать временную часть значения.

Если вы хотите сократить время, потому что вы не хотите, чтобы события, помеченные как происходящие через час, обрабатывались по-разному, вам просто нужно округлить значение с помощью функции FLOOR:

FLOOR(somedatecell, 1)

Поскольку часть времени значения всегда является десятичной после числа, следующего за частью значения даты, она округляется с, скажем, 39926.2725925926 (сегодня в 6:32:32 AM) до 39926 (сегодня в полночь) .

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

Однако, если вы просто хотите использовать дату в виде строки, вам придется преобразовать значение даты в текст, используя функцию TEXT:

 TEXT(somedatecell,"mm/dd/yyyy")

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

 TEXT(FLOOR(somedatecell, 1), "mm/dd/yyyy")

Excel в основном делает это для вас, когда вы говорите, что хотите отформатировать текст с использованием формата даты, но на тот случай, если вам нравятся более аккуратные вещи, вы можете сначала округлить.

0 голосов
/ 23 апреля 2009

Если ваш набор данных имеет DateTime, он также будет содержать 2009-04-23 00: 00: 00.000. Вы можете отформатировать этот объект в выходном коде:

Date.toString ( "гггг-ММ-дд");

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...