如何在SQL Server 2008中使用带有datetime的Where子句

时间:2013-05-06 06:38:49

标签: .net sql visual-studio-2010 sql-server-2008 datetime

我写了这个查询:

SELECT * 
FROM w_tbl 
WHERE DID NOT IN (SELECT DId FROM tbl_Assign) 
  AND CAST(MeasDateTime AS Date) = @dta 
ORDER BY 
    CAST(MeasDateTime as DATE) DESC

因此,您可以看到我正在发送参数化查询。

所以我为24/09/2010 00:00:00

添加了@dta

但是我收到了这个错误:

  

从租船人字符串转换日期和/或时间时转换失败。

我告诉你为什么我这样做以及我的目的:

我有一个日期时间列,我想只按日期选择/获取所有数据(即我不想明确获取日期时间,它必须只是根据日期)

2 个答案:

答案 0 :(得分:0)

如果您只想按日期选择并且您有DateTime类型,请使用日期函数:

DATEADD ( dd , 0 , DATEDIFF ( dd , 0 , @dta))

所以在你的情况下:

SELECT * 
FROM w_tbl 
WHERE DID NOT IN (SELECT DId FROM tbl_Assign) 
  AND DATEADD ( dd , 0 , DATEDIFF ( dd , 0 , MeasDateTime)) = DATEADD ( dd , 0 , DATEDIFF ( dd , 0 , @dta)) 
ORDER BY 
    MeasDateTime DESC -- No need for CAST/CONVERT here, it will be ok either way

答案 1 :(得分:-1)

首先检查@dta值原因24/09/2010可能是错误的日期。请尝试使用2010年9月24日或2010年9月24日并检查。始终avoid confusion in dd/MM/yyyy and MM/dd/yyyy使用MMM一个月。 SQL正确处理MMM的日期时间格式。像dd-MMM-yyyy。默认情况下,SQL使用美国标准,日期格式为MM / dd / yyyy。

感谢。