0

以下是 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

输出:

一月 | 二月 | 三月 ....等等... | 十一月 | 十二月
 0 1 1 0 1

0 和 1 是指示月份和年份是否存在于整个日期列中的标志
4

1 回答 1

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,每个月就没有至少一个日期。

于 2012-11-20T15:45:06.593 回答