2016-05-22 160 views
-1

我有两个问题在两个项目中,都与日期时间有关。.Net/SQL Server:比较日期(日期时间<->日期时间,日期时间<-> varchar)

项目1

日期在SQL Server 2008数据库保存为yyyy/MM/dd,但System.DateTime.Now.ToShortDateString()回报dd/MM/yyyy。以内联代码书写的SQL查询无法比较两个日期。我已尝试ParseExact,CAST,Convert和许多其他选项,但无法使其工作。

项目2

在SQL Server 2008数据库,日期时间保存在varchar(50)列。即使在尝试了很多选项之后,使用Between子句也会因内联SQL查询而失败。

注:我在前端和后端使用快递版本。

请在两个帮助。提前致谢。

+1

如果你存储的日期和时间, ***不要使用'varchar(50)'!干净利落。如果您只需要日期(无时间),则使用**适当的**数据类型 - 如果您需要日期和时间部分,则使用“DATE”;如果需要日期和时间部分,则使用“DATETIME2(n)”。 –

+0

“在SQL Server 2008数据库中,日期时间保存在varchar(50)列中。” - 你为什么会这样?认真。 –

回答

-1

使用.NET中的任何DateTime,您可以在tostring函数中提供日期时间格式。有了这个,你可以强制你的日期时间与SQL Server相同的格式进行比较。

+2

你应该**不**将日期/时间转换为**字符串**进行比较 - 您应该将它们保留为**本机'DATETIME' **类型并进行比较! (因为这些是任何格式和其他废话**独立**) –

-1

项目1:解决

您可以将日期转换如下格式简单:

select convert(varchar,dateadd(MI, 330, GETUTCDATE()),111) 

输出:2016年5月22日

项目2:解决方案

inst使用between的EAD您可以使用下面的查询搜索

select * from yourtablename 
where (datecolumn>=convert(varchar,dateadd(MI, 330, GETUTCDATE()),111) and 
datecolumn<=convert(varchar,dateadd(MI, 330, GETUTCDATE()),111)) 

尝试,让我知道了,该死的肯定,这将工作..

问候: ķ

+1

[踢坏的习惯:声明VARCHAR没有(长度)](http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/ 09/bad-habits-to-kick-declaring-varchar-without-length.aspx) - 你应该总是**为你使用的任何'varchar'变量和参数提供一个长度(包括当你在'CONVERT'调用!) –

+0

是的,但是,这里仅仅是转换格式本身并不需要声明长度,上面的代码将正常工作。 – Kannappan