2009-06-01 16 views
0

海、SQLクエリのヘルプ

テーブル構造

Id No Date  Time 

0001, 01-05-2009, 040000 
0001, 02-05-2009, 020000 
0002, 01-05-2009, 060000 
0002, 01-05-2009, 180000 

時刻と日付がnvarchar型である

私は

  • の間でデータを取得したい昨日030001 030000
  • 昨日前0300001から昨日030000

私はそれは03.00時から03.01am に今日の時間がかかっているため、結果に表示さ

Select 
    idno, min (time), max (time) 
from 
    table 
where 
    time between 030001 and 030000 

何が丁度私が03.01午前

昨日、今日03.00午前を必要としません下記のクエリを試してみました

私は上記の条件のSQLクエリが必要です

誰かが私を助けることができますか?

Jash。

+2

テーブルの構造を変更できますか? nvarcharに日付と時刻を格納するのはちょっとばかげて、それを本当に検索するのが難しくなります....また、どのSQLシステムを使用していますか? –

答えて

1

日付がDD-MM-YYYYのような形式の場合は、並べ替えやフィルタリングが難しいです。このような形式では、01-01-2009は02-01-2000より前に来ます!だから、

、まず最初に長い年月を使用して日付を変換し、そして短い秒が最後:

YYYY-MM-DD HH:MM:SS 

このようなクエリはそれを行うことができます。

select [id no], 
    substring(date,1,2) + '-' + substring(date,4,2) + '-' + 
    substring(date,7,4) + ' ' + 
    substring(time,1,2) + ':' + substring(time,3,2) + ':' 
    substring(time,5,2) as NormalDate 
from YourTable 

今、あなたは簡単にすべてを選択することができます特定のタイムスパンの行:

select * 
from (
    select [id no], 
     substring(date,1,5) + '-' + substring(date,7,4) + ' ' + 
     substring(time,1,2) + ':' + substring(time,3,2) + ':' 
     substring(time,5,2) as NormalDate 
    from YourTable 
) sub 
where '2009-05-01 03:00:00' < NormalDate 
and NormalDate < '2009-05-02 03:00:00'