2010-11-09 86 views
0

我需要将现有表格中的日期与选定的日期进行比较以求平等。我正在开发一个asp.net应用程序,我正在绑定插入一个新的记录在已经存在的表中,我在那个asp.net表单中使用了ajax日历扩展器,我需要将选定的日期与已经存在的日期进行比较,以便即使在添加新记录之前,也会在gridview中显示包含相同日期的记录。sql查询将现有表中的日期与选定日期进行比较?

+0

你是什么意思与选定的日期,什么平等(同一天,同一秒,......)? – 2010-11-09 09:56:21

+0

日期是我的输入数据,我将这个日期与表中的日期进行比较。我只是比较日期,我想排除时间。 – 2010-11-09 10:21:39

回答

2

我完全不懂问题出在哪里....

DECLARE @YourDate DATETIME 
SET @YourDate = '2010-11-09' 

SELECT (list of columns) 
FROM dbo.YourTable 
WHERE SomeDateColumn = @YourDate 

你需要了解的主要问题:在SQL Server中的最高版本上升到2005年的版本,你只有DATETIME数据类型,顾名思义存储日期为时间 - 所以精确匹配会匹配到毫秒......通常这不是您真正想要的。

你能更详细地解释你想要达到什么样的目标吗?

+0

非常感谢你的回复。我正在开发一个asp.net应用程序,我正在绑定插入一个新的记录在已经存在的表中,我在那个asp.net表单中使用了ajax日历扩展器,我需要将选定的日期与已经存在的日期进行比较,以便即使在添加新记录之前,也会在gridview中显示包含相同日期的记录。希望你了解这种情况。是的,我只想比较排除时间的日期。 – 2010-11-09 10:12:56

2

如果你只在该日期元素平等兴趣,忽略当前列值之内的时间,然后用一个条款是这样的:

DECLARE @DateParam DATETIME 
SET @DateParam = '20101109' 

SELECT SomeField 
FROM SomeTable 
WHERE DateField >= @DateParam AND DateField < DATEADD(dd, 1, @DateParam) 

这个例子会发现其中的DateField列有所有记录日期(&时间)。

+0

非常感谢您的回复。我认为这正是我正在寻找的。我只想比较排除时间的日期。 – 2010-11-09 10:25:30

+0

感谢分享。我很高兴我在这里学习新的东西..:):)...以及如何使上述查询工作的MM/DD/YYYY格式? – 2010-11-09 10:37:13

1

我将完全从marc_s和AdaTheDev的解决方案去(和他们和我的你所需要的理解 - 你需要在你的问题,以确定您选择的日期是什么)

不过,假设你选择的输入是日期(如在其他的答案),其中YYYY-MM-DD(marc_s)或YYYYMMDD的格式(adathedev),以下替换也应努力

DECLARE @Date DATETIME 
SET @Date = '2010/10/10' 

SELECT * 
FROM SomeTable 
WHERE CONVERT(VARCHAR(10), DateField, 126) = @Date 

当你声明的日期时间和仅使用日期设置 - 时间设置为12:00:00.000。所以使用等号运算符时,它会查找与时间完全匹配的数据(如果您使用GETDATE()等方法插入表中,这种情况极不可能)。

我的解决方案只是在查询时省去数据库中的字段。但我仍然会与其他解决方案一起去。这只是一种选择。

+1给其他人。

+0

感谢您的回复哥们。我想你是对的,我只是想比较不包括时间的日期。我认为我的日期时间格式是MM/DD/YYYY现在如何使这种格式的上述查询工作? – 2010-11-09 10:26:15

+2

只是为了解释这种差异,假设DateField已编入索引,此方法将防止因使用CONVERT而使用索引。这就是你应该尽量避免在匹配时操纵列本身。 – AdaTheDev 2010-11-09 10:29:57

+0

@AdaTheDev - 正确。谢谢你的澄清。没有提到为什么我的解决方案不适用于其他解决方案。 – Kamal 2010-11-09 10:31:32

相关问题