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がありませんが、2番目の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 に答える