SQL:查询使用if显示日期范围

时间:2014-06-23 03:31:35

标签: mysql

我对MySQL中的语法有疑问......让我告诉你

预期结果

| ID |日期|状态|
| ----- | ---------------- | ---------- |
| 2 | 2014-06-10 | H |
| 2 | 2014-06-11 | O |
| 2 | 2014-06-12 | H |
| 2 | 2014-06-13 | - |
| 2 | 2014-06-14 | H |

问题
在我的数据库中日期= 2014-06-13 未找到,但我仍希望显示状态' - '

查询已尝试

SELECT id,date,status 
FROM v_absensi 
WHERE site_absensi='IDJK068PBP' 
  AND tanggal != 'Belum Ada' 
  AND DATE_FORMAT( STR_TO_DATE( tanggal ,'%d/%m/%Y' ) ,'%Y/%m/%d' )
      BETWEEN DATE_FORMAT( STR_TO_DATE( '18/06/2014' ,'%d/%m/%Y' ) ,'%Y/%m/%d' )
      AND DATE_FORMAT( STR_TO_DATE( '23/06/2014' ,'%d/%m/%Y' ) ,'%Y/%m/%d' ) 
  AND id='2'

需要你的建议人员 谢谢你的建议!!!

1 个答案:

答案 0 :(得分:0)

像这样创建一个虚拟表。

CREATE TABLE aDummyTable ( id int(10) unsigned NOT NULL auto_increment, PRIMARY KEY (id) );

然后插入一些值:

INSERT INTO aDummyTable (id) VALUES (NULL);
INSERT INTO aDummyTable (id) VALUES (NULL);
INSERT INTO aDummyTable (id) VALUES (NULL);
INSERT INTO aDummyTable (id) VALUES (NULL);
INSERT INTO aDummyTable (id) VALUES (NULL);
INSERT INTO aDummyTable (id) VALUES (NULL);
INSERT INTO aDummyTable (id) VALUES (NULL);
INSERT INTO aDummyTable (id) VALUES (NULL);
INSERT INTO aDummyTable (id) VALUES (NULL);
INSERT INTO aDummyTable (id) VALUES (NULL);
INSERT INTO aDummyTable (id) VALUES (NULL);

将此视为您的表:

CREATE TABLE  urTable (
  id int(10) unsigned NOT NULL auto_increment,
  dateVal date,
  val varchar(10),
   PRIMARY KEY  (id)
);

插入一些值,例如:

INSERT INTO urTable  (id,dateVal,val)VALUES   (1,'2014-06-10','H');
INSERT INTO urTable  (id,dateVal,val)VALUES   (2,'2014-06-11','O');
INSERT INTO urTable  (id,dateVal,val)VALUES   (3,'2014-06-12','H');
INSERT INTO urTable  (id,dateVal,val)VALUES   (4,'2014-06-14','H');

这是你的结果。

SELECT x.ts AS time,
         COALESCE(y.val, '-') AS urVal
     FROM (SELECT DATE_FORMAT(DATE_ADD('2014-06-10', INTERVAL n.id - 1 DAY), '%Y-%m-%d') AS ts
             FROM aDummyTable n
            WHERE DATE_ADD('2014-06-10', INTERVAL n.id - 1 DAY) <= '2014-06-14') x
LEFT JOIN urTable y  ON  DATE_FORMAT(dateVal, '%Y-%m-%d') = x.ts;

Fiddle