0

我需要将现有表中的日期与所选日期进行比较以确保相等。我正在开发一个 asp.net 应用程序,我想在已经存在的表中插入一条新记录,我在该 asp.net 表单中使用 ajax 日历扩展器,我需要将所选日期与现有日期进行比较,以便甚至在我添加新记录之前,在网格视图中显示包含相同日期的记录。

4

4 回答 4

2

我完全不明白问题出在哪里......

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

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

您需要注意的主要问题:在 SQL Server 直到版本 2005 中,您只有DATETIME数据类型,顾名思义,它存储日期时间 - 因此精确匹配将匹配到毫秒。 ... 通常这不是你真正想要的。

您能否更详细地解释您要实现的目标以及遇到的麻烦?

于 2010-11-09T09:56:51.013 回答
2

如果您只对 DATE 元素上的相等性感兴趣,而忽略列值中存在的时间,则使用如下子句:

DECLARE @DateParam DATETIME
SET @DateParam = '20101109'

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

此示例将查找 DateField 列在上述日期的任何时间点具有日期(和时间)的所有记录。

于 2010-11-09T10:02:10.453 回答
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 给其他人。

于 2010-11-09T10:11:47.667 回答
0

http://www.sql-server-tool.com/compare-two-tables.htm 检查网站

于 2010-11-09T13:59:35.917 回答