如何在同一语句中的where子句中使用like和between?

Pet*_*ter 4 sql t-sql sql-server-2008

我试图根据日期在数据库中找到一组结果.日期存储为varchars,格式为dd/mm/yyyy hh:mm:ss.

我想要做的是搜索指定日期范围内的所有日期.

例如我试过:

SELECT * FROM table_name
WHERE fromDate BETWEEN LIKE '%12/06/2012%' AND LIKE '%16/06/2012%'
Run Code Online (Sandbox Code Playgroud)

这样的事情是可能的还是有更好的方法来做这种声明,因为到目前为止我没有取得什么成功?

我正在使用Microsoft SQL Server 2008.

彼得

Aar*_*and 7

由于您的日期值还包括时间,因此您无法使用BETWEEN.唯一安全的方法是:

SELECT <cols> FROM dbo.table_name
WHERE CONVERT(DATE, fromDate, 103) >= '20120612' 
AND CONVERT(DATE, fromDate, 103) < '20120617';
Run Code Online (Sandbox Code Playgroud)

但正如Martin注意到的那样,你永远无法在该列上使用索引,因此这将始终执行全表扫描.

如果你真的,真的想要使用BETWEEN,转换为DATE是唯一安全的方法(好吧,或以其他更低效的方式修剪时间):

SELECT <cols> FROM dbo.table_name
WHERE CONVERT(DATE, fromDate, 103) BETWEEN '20120612' AND '20120616';
Run Code Online (Sandbox Code Playgroud)

但是,出于一致性考虑,我建议对即使在这种情况下之间.