4

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

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

例如我试过:

SELECT * FROM table_name
WHERE fromDate BETWEEN LIKE '%12/06/2012%' AND LIKE '%16/06/2012%'

像这样的事情是可能的还是有更好的方法来做这种类型的陈述,因为到目前为止我几乎没有成功?

我正在使用 Microsoft SQL Server 2008。

彼得

4

5 回答 5

7

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

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

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

如果您真的非常想使用 BETWEEN,则转换为 DATE 是唯一安全的方法(好吧,或者以其他效率较低的方式减少时间):

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

但出于一致性原因,即使在这种情况下,我也建议反对 between

于 2012-06-21T12:22:43.583 回答
2

尝试这个

SELECT * FROM table_name
WHERE Convert(Date,fromDate,103) 
BETWEEN '20120612' AND '20120616'
于 2012-06-21T11:39:22.513 回答
1

最好的解决方案是将您的 varchars 作为 DateTime 存储在数据库中。

第二好的是将 then 转换为选择中的日期(因为其他答案只是表明,所以我不打算给出示例)

于 2012-06-21T11:40:11.203 回答
0

嗨,伙计,这不是火箭科学兄弟,只是做一个类似的逻辑

块引用

SELECT * FROM table_name WHERE fromDate BETWEEN '2021-05-01 12:00:00' AND '2021-05-01 23:59:00'

块引用

它会工作我也卡住了,但它有帮助。我也试着像你一样做一个逻辑

于 2021-06-01T15:07:54.860 回答
0

以下对我来说很好。尝试这个:

 SELECT *
 FROM [MABH-Desi-Dera].[dbo].[Order] 
 WHERE (CONVERT(nvarchar,[Order_ID]) BETWEEN  '200622%' AND '200623%')

这里Order_IDs 以一些Date开头:

于 2020-06-25T12:46:21.693 回答