【问题标题】:How to put datetime condition in where clause on nvarchar column in TSQL?如何将日期时间条件放在 SQL 中 varchar 列的 where 子句中?
【发布时间】:2011-04-20 17:57:06
【问题描述】:

在 SQL Server 2005 数据库中,表有一个 nvarchar 列,其中包含日期时间或某些字符串值。例如03/11/2011 4:00:07 AMCompleted

 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

我需要状态字段具有日期时间且日期时间介于 date1 和 date2 之间的数据。

【问题讨论】:

  • @Jeff:你编辑了它。但是什么是 SWL?
  • 这叫错字,User13839404。下次请随意修复它,而不是发表评论。
  • 我希望这不是一个需要高效的查询。它不是“SARGable”(参见 google),最大的问题是该列的数据类型不明确。也许这在您的上下文中没问题,但如果查询速度很慢,您需要规范化内容,最好是作为日期时间。

标签: sql-server-2005 tsql


【解决方案1】:
WHERE 
CASE WHEN ISDATE(status) = 1 
     THEN CONVERT(DATETIME,status) 
END BETWEEN '20110311 12:00:01' AND '20110418 16:00:00'

【讨论】:

    猜你喜欢
    • 2023-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多