1

我的表名是“信息”

结构是:

No int,
Name varchar(200),
Date varchar(30)

记录:

No  Name        Date
=====================================
1   A       25/08/2012
2   B       10/08/2012
3   C       11/08/2012
4   D       01/09/2012

我的问题是我想要 25/08/2012 到 01/09/2012 之间的 No,Name,Date

我尝试了以下查询,但我无法得到它。

select No,Name,Date 
from information 
where Date>='25/08/2012' and Date<='01/09/2012'

我不想将日期列(varchar)更改为日期时间

请帮我

4

4 回答 4

1

您可以尝试将 varchar 转换为日期时间:

SELECT No,Name,Date from information 
WHERE CONVERT(datetime, Date, 103) >= CONVERT(datetime, '25/08/2012', 103) 
AND CONVERT(datetime, Date, 103) <= CONVERT(datetime, '01/09/2012', 103)
于 2012-09-03T06:07:58.403 回答
1

如前所述,将您的列转换为日期时间。我个人会使用 between 语句作为它的清洁剂。

select No,Name,Date from information where convert(datetime, Date, 103) between convert(datetime, '25/08/2012', 103) and convert(datetime, '01/09/2012', 103)

根据您的输入参数,您可能可以事先将它们转换为日期时间(因此您可以在执行之前检查输入的值。例如;

declare @startdate datetime
declare @enddate datetime

set @startdate = convert(datetime, '25/08/2012', 103)
set @enddate = convert(datetime, '01/09/2012', 103)

select No,Name,Date from information where convert(datetime, Date, 103) between @stardate and @enddate
于 2012-09-03T06:21:02.370 回答
1

请使用以下查询,您不需要将日期列(varchar)更改为日期时间。

select No,Name,Date from information where CONVERT(date,[DATE],103) >=  CONVERT(date,'25/08/2012',103)  and CONVERT(date,[DATE],103) <=  CONVERT(date,'01/09/2012',103) 
于 2012-09-03T06:26:54.413 回答
0

您需要将VARCHAR数据类型转换为Date. 尝试,

SELECT  No, Name, [Date]
FROM    information 
where   CAST([Date] AS Date) BETWEEN CAST('2012-08-25' AS DATE) AND  
                                     CAST('2012-09-09' AS DATE)
于 2012-09-03T06:17:55.713 回答