SQL查询帮助

时间:2009-06-01 08:42:28

标签: 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

我尝试了下面提到的查询

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

结果中没有显示任何内容,因为今天的时间是从凌晨03.00到凌晨03.01 我今天早上03.00到昨天凌晨03.01正好需要

我需要针对上述条件的SQL查询

任何人都可以帮助我吗?

JASH。

1 个答案:

答案 0 :(得分: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'