如果日期存在于表列中的任何位置,则返回单行

时间:2012-11-20 15:39:12

标签: mysql

以下是mysql查询,其中我正在检测数据库日期列中是否存在当前(所有)月份和当前年份。查询工作正常,但它分别运行表的每一行,并返回表中存在的所有行数以及该行的特定匹配。我想做的是以下查询应该返回单行并告诉表中是否存在给定日期(日期列中的任何位置)。请告诉我如何修改以下查询来执行此操作。感谢

SELECT 
IF(DATE_FORMAT(FROM_UNIXTIME(dt_note_created),'%Y%m') =  CONCAT((DATE_FORMAT(NOW(),'%Y')),'01'),1,0) as jan,
IF(DATE_FORMAT(FROM_UNIXTIME(dt_note_created),'%Y%m') =  CONCAT((DATE_FORMAT(NOW(),'%Y')),'02'),1,0) as feb,
IF(DATE_FORMAT(FROM_UNIXTIME(dt_note_created),'%Y%m') =  CONCAT((DATE_FORMAT(NOW(),'%Y')),'03'),1,0) as mar,
IF(DATE_FORMAT(FROM_UNIXTIME(dt_note_created),'%Y%m') =  CONCAT((DATE_FORMAT(NOW(),'%Y')),'04'),1,0) as apr,
IF(DATE_FORMAT(FROM_UNIXTIME(dt_note_created),'%Y%m') =  CONCAT((DATE_FORMAT(NOW(),'%Y')),'05'),1,0) as may,
IF(DATE_FORMAT(FROM_UNIXTIME(dt_note_created),'%Y%m') =  CONCAT((DATE_FORMAT(NOW(),'%Y')),'06'),1,0) as jun,
IF(DATE_FORMAT(FROM_UNIXTIME(dt_note_created),'%Y%m') =  CONCAT((DATE_FORMAT(NOW(),'%Y')),'07'),1,0) as jul,
IF(DATE_FORMAT(FROM_UNIXTIME(dt_note_created),'%Y%m') =  CONCAT((DATE_FORMAT(NOW(),'%Y')),'08'),1,0) as aug,
IF(DATE_FORMAT(FROM_UNIXTIME(dt_note_created),'%Y%m') =  CONCAT((DATE_FORMAT(NOW(),'%Y')),'09'),1,0) as sep,
IF(DATE_FORMAT(FROM_UNIXTIME(dt_note_created),'%Y%m') =  CONCAT((DATE_FORMAT(NOW(),'%Y')),'10'),1,0) as oct,
IF(DATE_FORMAT(FROM_UNIXTIME(dt_note_created),'%Y%m') =  CONCAT((DATE_FORMAT(NOW(),'%Y')),'11'),1,0) as nov,
IF(DATE_FORMAT(FROM_UNIXTIME(dt_note_created),'%Y%m') =  CONCAT((DATE_FORMAT(NOW(),'%Y')),'12'),1,0) as decb
FROM Notes

输出:

jan | feb | Mar ....and so on... | nov | dec
 0     1     1                      0     1

0 and 1 are flags which are telling if the monthandyear exist in the whole column of date or not

1 个答案:

答案 0 :(得分:1)

我不确定我是否理解正确,但如果您只想检查列中是否至少有一个日期符合当前月份和年份,请尝试

SELECT COUNT(*) 
FROM date
WHERE MONTH(dt_note_created) = MONTH(Now()) 
  AND YEAR(dt_note_created) = YEAR(Now()) 

如果没有这样的日期,则返回0,否则返回总日期数。

尝试

SELECT DISTINCT MONTH(dt_note_created)
FROM date
WHERE YEAR(dt_note_created) = YEAR(Now())

获取日期列中包含的不同月份列表。

它会返回类似的内容(对于1月,2月,8月,11月的日期):

1
2
8
11

只要这个数字小于12,每个月至少不会有一个日期。