3

テーブル名を持つデータベースを持っています

year200801
year200802
year200803
year201010
year201101
year201203
year201204
year201205
....

そして今、テーブルを取得する必要がありyear > date('Y')-2ます。どうやってするか?

"show tables like 'year%' AND $year>='year2012';"
4

2 に答える 2

5

痛い、これは残念なスキーマです。長期的には、これらの日付に依存するテーブル名を廃止するのが最善です。ただし、次の場所から入手できますinformation_schema

SELECT
  TABLE_NAME
FROM information_schema.TABLES
WHERE
  TABLE_SCHEMA='your_database_name'
  /* LEFT() should be faster than LIKE */
  AND LEFT(TABLE_NAME, 4)='year'
  /* The 4 char substring in the middle of the table name is >= 2 years ago */
  /* Use YEAR(NOW()) to get the current year */
  AND MID(TABLE_NAME, 5, 4) >= (YEAR(NOW()) - 2)

アップデート:

2 年前から現在の年までの表を表示するには、次を使用します。

  AND MID(TABLE_NAME, 5, 4) BETWEEN (YEAR(NOW()) - 2) AND YEAR(NOW())

Update 2これは、あなたが求めているとおりに正確に機能するはずです:

mysql> SELECT yearstring, MID(yearstring, 5, 4) BETWEEN (YEAR(NOW()) - 2) AND YEAR(NOW()) FROM tmp;
+------------+-----------------------------------------------------------------+
| yearstring | MID(yearstring, 5, 4) BETWEEN (YEAR(NOW()) - 2) AND YEAR(NOW()) |
+------------+-----------------------------------------------------------------+
| year201001 |                                                               1 |
| year201005 |                                                               1 |
| year201205 |                                                               1 |
| year201301 |                                                               0 |
| year201112 |                                                               1 |
| year201304 |                                                               0 |
| year200912 |                                                               0 |
| year200901 |                                                               0 |
+------------+-----------------------------------------------------------------+
于 2012-05-20T18:29:40.040 に答える
4
Show tables LIKE 'year201%'

2010-2019 の範囲のすべてのテーブルを一覧表示します。202x の場合:

Show tables LIKE 'year202%'
于 2012-05-20T18:56:08.200 に答える