通过忽略日期中的时间部分来显示数据

时间:2014-03-13 08:53:59

标签: mysql sql date plsql jasper-reports

我正在使用 JasperReports / iReport 来完成我的报告。我已经为客户写了一个查询日期的查询,但有1个问题,日期是时间部分。

如何忽略客户端键入数据的时间部分?

date                            rate
2/2/2014  12:56:21.0000 PM      ABC   
4/2/2014  12:56:21.0000 PM      EFG
5/2/2014  12:56:21.0000 PM      HIJ
...

我已经从客户指定设计时使用年,月和日的参数。换句话说,当客户键在年,月和日时, 数据将以这种方式显示:

2/2/2014  12:56:21.0000 PM      ABC

我写的查询如下所示:

select date,rate 
  from mytable
 where rownum=1 
       and tran_dt<=(select date 
                       from mytable 
                      where year(date)=$P{year} 
                            and month(date)=$P{month} 
                            and day(date)=$P{day}
                     )
order by 
       date

我正在使用pl / sql查询...

3 个答案:

答案 0 :(得分:1)

SQL SERVER:

使用此

 select convert(varchar(10), '2011-02-25 21:17:33.933', 120)

喜欢这个

 Select DATE_FORMAT(date,'%y-%m-%d'),rate from mytable
where rownum=1 and tran_dt<=(select tran_dt from bi01_trandetail where
year(date)=$P{year} and month(tran_dt)=$P{month} and day(tran_dt)=$P{day})
order by date

<强> MYSQL

使用

 DATE_FORMAT(date,'%y-%m-%d')


   Select DATE_FORMAT(date,'%y-%m-%d'),rate from mytable
   where rownum=1 and tran_dt<=(select tran_dt from bi01_trandetail where
   year(date)=$P{year} and month(tran_dt)=$P{month} and day(tran_dt)=$P{day})
   order by date

OR

SELECT DATE('2003-12-31 01:02:03');
'2003-12-31'



  Select date(date),rate from mytable
   where rownum=1 and tran_dt<=(select tran_dt from bi01_trandetail where
   year(date)=$P{year} and month(tran_dt)=$P{month} and day(tran_dt)=$P{day})
   order by date

您的新查询:

select date,rate 
  from mytable
 where rownum=1 
       and tran_dt<=(select DATE_FORMAT(date,'%y-%m-%d') 
                       from mytable 
                      where year(date)=$P{year} 
                            and month(date)=$P{month} 
                            and day(date)=$P{day}
                     )
order by 
       date

MYSQL DATE FUNCTION

答案 1 :(得分:0)

你必须从DDBB ......

开始

使用PL / SQL 检查TO_CHAR文档,http://www.techonthenet.com/oracle/functions/to_char.php,(以及此SO问题,; D:How to format a Date variable in PLSQL)。

您的查询将是:

SELECT TO_CHAR(date, 'MM/DD/YYYY'), rate from mytable ...

使用MySQL (注意:我留下MySQL答案,因为我先回答了它,因为它没有指定RMDB)

MySQL DATE_FORMAT函数,只获得你想要的东西: http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_date-format

以网络为例:

SELECT DATE_FORMAT('2009-10-04 22:23:00', '%W %M %Y');
        -> 'Sunday October 2009'

测试您建议的案例:

SELECT DATE_FORMAT('2014-03-02 23:45:35', '%e/%c/%y %H:%i:%s %p');
-> 2/3/14 23:45:35 PM

没有时间部分:

SELECT DATE_FORMAT('2014-03-02 23:45:35', '%e/%c/%y');
-> 2/3/14

您的查询将是:

select DATE_FORMAT(date, '%e/%c/%y') ,rate from mytable ...

...另一种方式是使用服务器脚本中的日期函数,但这是另一个历史记录,我需要您使用的语言,XD

答案 2 :(得分:0)

谢谢大家的回复,我找到了解决这个问题的方法。 让我分享查询,

从mytable选择率,截断(日期)为EFFDT 其中rownum = 1 和 date&lt; = to_date(:DAY ||'/'||:MTH ||'/'||:YR,'DD / MM / YYYY') 按日期排序desc