C# 我需要SQL Server中的yyyy-mm-dd hh:mm:ss在C中变成yyy-mm-dd#

C# 我需要SQL Server中的yyyy-mm-dd hh:mm:ss在C中变成yyy-mm-dd#,c#,sql-server-2005,datetime,C#,Sql Server 2005,Datetime,嗨 这可能是一个常见的问题 我在SQLServer2005数据库中有一个日期列(InvDate),其值如下 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 我不能走正确的路 有什么想法吗 谢谢。

这可能是一个常见的问题

我在SQLServer2005数据库中有一个日期列(InvDate),其值如下 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

我不能走正确的路

有什么想法吗


谢谢。

DateTime.Date是您的答案,它检索对象的日期部分,即time=00:00:00.000

        DateTime date = DateTime.Now;
        Console.WriteLine("Date is " + date.Date);

如果有DateTime成员实例,则可以调用方法“ToSortDate()”函数。

如果数据集有DateTime,则它也将保存2009-04-23 00:00:00.000。您可以在输出代码中设置此对象的格式:


日期:ToString(“yyyy-MM-dd”)

如果数据是字符串:


DateTime.Parse(yourDataAsString).ToString(“yyyy-MM-dd”)

如果要将日期写入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";

在SQL查询中,您可以使用以下语法指定不需要时间/日期值的时间部分:

 SELECT DATE(timedatecolumn) WHERE whatever = whatever
如果你想得到真正的花式,你可以使用DATE_格式,让它以你喜欢的任何方式输出。例如:

SELECT DATE_FORMAT(timedatecolumn, '%W, %M %D, %Y') WHERE blah = blah
将输出(如果日期为今天):

日期格式的各种选项(在MySQL中)位于:

另外,请记住Excel中的日期值(如果它将其格式化为实际日期,而不仅仅是字符串)实际上不是您在单元格中看到的值。它是Microsoft日期值(基本上是与Microsoft logic中的日期和时间相关的某个整数),因此如果希望Excel识别该值并将其视为日期(例如,如果希望基于较旧的值或特定月份的值运行函数或公式,等等)您只需要格式化列,使其不显示值的时间部分

如果由于不希望对标记为一小时后发生的事件进行不同处理而希望删除时间,则只需使用FLOOR函数向下舍入该值:

FLOOR(somedatecell, 1)
 TEXT(somedatecell,"mm/dd/yyyy")
由于该值的时间部分始终是该值日期部分后的一个十进制数,因此该值将从39926.2725926(今天上午6:32:32)四舍五入到39926(今天午夜)

您仍然需要格式化单元格以去除时间部分,但现在所有相等的日期实际上都相等,并且不会以任何小时或分钟为间隔

但是,如果您只是想将日期作为字符串,则必须使用text函数将datevalue转换为文本:

FLOOR(somedatecell, 1)
 TEXT(somedatecell,"mm/dd/yyyy")
如果您想成为超级肛门(像我一样,但这不是必需的),可以先将日期值舍入到午夜,然后使用以下公式将其转换为文本:

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

当您说要使用日期格式格式化文本时,Excel基本上会为您这样做,但为了防止您喜欢更整洁的文本,您可以先四舍五入。

使用String.format按您的需要格式化日期,或者使用DateTime.ToString

在SQL中处理这个问题比必要的要麻烦得多。在将DateTime值的字符串表示形式转换为Excel之前,请先转换C代码


或者,如果您喜欢冒险,可以给Excel指定DateTime值,然后在Excel电子表格单元格中添加格式以正确显示该值。这是最正确的方法,因为该值仍然是日期,对于Excel也是如此。

ToSortDate()使用当前线程的区域性信息。toString(“yyyy-MM-dd”)总是返回您所需的格式。这是Excel工作表上的格式问题,而不是C#中的DateTime变量的问题。您已经声明它在数据库中存储时没有时间组件。if(connection.DataSource.EndsWith(“mdb”){command.CommandText=“选择格式([InvDate],'yyyy-mm-dd')作为来自Foo的InvDate”;}else{command.CommandText=“选择replace(convert(varchar(11),[InvDate],102),'.','-')作为来自Foo的InvDate”}我想这也行得通。