0

我需要选择在名称末尾具有指定数字的所有表(数字是当前年份 - 6 个月与当前月份 - 6 个月)。

我试过了,但它失败了,因为 tb 不是一列

SELECT 
 table_name AS tb
FROM 
 information_schema.tables
WHERE 
 table_schema = DATABASE()
AND tb LIKE "something_%"
AND (SELECT DATE_FORMAT(CURDATE() - INTERVAL 6 MONTH,'%Y%m')) < RIGHT(tb, 6)

任何想法如何做到这一点?

4

2 回答 2

0

嗯,首先,这闻起来像是一个糟糕的桌子设计。如果您的信息必须在表名中编码,您也可以将其放在表中的列中。那么问题就不会发生了。

其次,您的 SELECT 语句缺少 FROM - 但整个第二个 SELECT 不会那样工作......但我真的不知道如何帮助那里。看看我的第一点;-)

于 2013-03-11T10:38:12.573 回答
0

您不能在 WHERE 子句中使用别名。并且LIKE不支持并且AND像您似乎希望的那样。你必须用CONCAT()

SELECT 
 table_name AS tb
FROM 
 information_schema.tables
WHERE 
 table_schema = DATABASE()
AND table_name LIKE CONCAT('something', (SELECT DATE_FORMAT(CURDATE() - INTERVAL 6 MONTH,'%Y%m')))
于 2013-03-11T10:40:19.330 回答