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_idINT、データ型ですtime_namevarchar

ここでは、すべてのデータ間のみ8:30 AMを表示したい11:00 PM

ご質問はお気軽にどうぞ

4

4 に答える 4

1

time_nameSQL Server 2008 を使用しているため、単純に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 に答える
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 に答える
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 に答える
0

私は SQL ユーザーではありませんが、'time_name' を DateTime データ型に変換し、DateTime1 と DateTime2 の間で選択を使用しようとしています

于 2012-11-29T06:33:35.337 に答える