1

请给我这个问题的正确答案

这是表格time_names及其结构:

time_id    time_name
-------    ----------
  1        5:00 AM
  2        5:15 AM
  3        5:30 AM
  4        5:45 AM
  5        6:00 AM
  6        6:15 AM
 ...       .....
 ...       .....
 70        10:15 PM
 71        10:30 PM
 72        10:45 PM
 73        11:00 PM
 74        11:15 PM
 75        11:30 PM
 76        11:45 PM

time_idINTtime_namevarchar数据类型。

在这里,我只想8:30 AM11:00 PM所有数据之间显示

请给我任何查询

4

4 回答 4

1

select time_name between将不起作用,因为它是字符串比较。您必须使用time_id或转换时间,例如这样

select *
from time_names
where convert(nvarchar(8), convert(datetime, time_name, 109), 108) between '08:30' and '23:00'

在这里,我将时间从字符串转换为实际日期时间,然后将其转换为 24 小时格式,因此您可以使用字符串比较。
你也可以使用time类型

select *
from time_names
where convert(time, time_name, 109) between '08:30' and '23:00'

http://msdn.microsoft.com/en-us/library/ms187928.aspx

我也不得不说这个桌子设计看起来真的很糟糕。您必须将日期和时间存储在具有适当类型的列中。

于 2012-11-29T06:39:09.563 回答
1

由于您使用的是 SQL Server 2008,因此您可以简单地将time_name转换为TIME数据类型:

SELECT time_id, time_name
FROM dbo.time_names
WHERE CAST(time_name AS TIME) BETWEEN '08:30 AM' AND '11:00 PM' 

但说真的:如果你存储一个时间值 -你为什么不使用适当的TIME数据类型呢?

于 2012-11-29T06:45:13.137 回答
0

我不是 SQL 用户,但尝试将 'time_name' 转换为 DateTime 数据类型并在 DateTime1 和 DateTime2 之间进行选择

于 2012-11-29T06:33:35.337 回答
0

您可以使用以下查询

CREATE table #Time(
time_id int PRIMARY key,
time_name varchar(255))
INSERT INTO #Time values(1, '5:00 AM')
INSERT INTO #Time values(2, '5:15 AM')
INSERT INTO #Time values(3, '5:30 AM')
INSERT INTO #Time values(4, '5:45 AM')
INSERT INTO #Time values(5, '6:00 AM')
INSERT INTO #Time values(6, '6:15 AM')
INSERT INTO #Time values(7, '6:30 AM')
INSERT INTO #Time values(8, '6:45 AM')

select * from #Time
where CAST(time_name as datetime) between CAST('5:30 AM' as datetime) and CAST('6:00    AM' as datetime)


DROP TABLE #Time
于 2012-11-29T06:39:02.077 回答