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