0

我写了这个查询:

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

但我得到这个错误:

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

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

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

4

2 回答 2

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
于 2013-05-06T06:48:06.473 回答
-1

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

谢谢。

于 2013-05-06T07:20:43.010 回答