我需要将现有表中的日期与所选日期进行比较以确保相等。我正在开发一个 asp.net 应用程序,我想在已经存在的表中插入一条新记录,我在该 asp.net 表单中使用 ajax 日历扩展器,我需要将所选日期与现有日期进行比较,以便甚至在我添加新记录之前,在网格视图中显示包含相同日期的记录。
问问题
669 次
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
于 2010-11-09T13:59:35.917 回答