Requête SQL pour entre des données dans une table

S'il vous plaît donnez-moi une bonne réponse pour cette question

C'est la table time_names et sa structure:

 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_id est INT , time_name est varchar datatype.

Ici, je veux montrer que 8:30 AM à 11:00 PM entre toutes datatables

S'il vous plaît donnez-moi une requête

Puisque vous êtes sur SQL Server 2008, vous pouvez simplement time_name le time_name en un type de données TIME :

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

Mais sérieusement: si vous stockez une valeur de time – POURQUOI n'utilisez-vous pas le type de données TIME approprié?

select time_name between ne fonctionnera pas, car c'est une comparaison de strings. Vous devez utiliser time_id ou convertir le time, par exemple comme ceci

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

Ici, je convertis le time de la string en time réel, puis je le convertis en format 24 heures, de sorte que vous pouvez utiliser la comparaison de strings.
vous pouvez également utiliser le type de 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

Je dois aussi dire que cette design de la table est vraiment mauvaise. Vous devez stocker la date et l'heure dans les colonnes avec les types appropriés.

Je ne suis pas un user SQL, mais essayez de convertir le 'time_name' au type de données DateTime et utilisez une sélection entre DateTime1 et DateTime2

Vous pouvez utiliser la requête suivante

 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