2011-04-20 38 views
1

在SQL Server 2005数据库中,表的nvarchar列包含datetime或某个字符串值。例如03/11/2011 4:00:07 AMCompleted如何把日期时间条件放在TSQL中nvarchar列的where子句中?

select * from log 
where status >= 
    case isdate(status) 
    when 1 then convert(datetime, '03/11/2011 12:00:01 AM') 
    else '' 
    end 
and status <= 
    case isdate(status) 
    when 1 then convert(datetime, '03/11/2011 4:00:00 PM') 
    else '' 
end 

我需要数据,其中状态字段的日期时间和日期时间介于日期1和日期2之间。

+1

@Jeff:你编辑它。但SWL是什么? – User13839404 2011-04-20 18:18:57

+0

它被称为错字User13839404。随时修复它,而不是评论。 – 2011-04-20 18:25:33

+0

我希望这不是一个需要高效的查询。它不是“SARGable”(请参阅​​google),最大的问题是列的模糊数据类型。也许在你的上下文中没问题,但是如果查询很慢,你需要规范化内容,最好是一个日期时间。 – dkretz 2011-04-20 18:50:39

回答

0
WHERE 
CASE WHEN ISDATE(status) = 1 
    THEN CONVERT(DATETIME,status) 
END BETWEEN '20110311 12:00:01' AND '20110418 16:00:00' 
相关问题