2012-02-12 33 views
4

我有一个名为bbs的数据库,它有37个表。 我想查找这些表中列名长度大于5的所有列!如何查找列名长度大于5的所有列?

mysql> show tables; 
+---------------------+ 
| Tables_in_rails_bb | 
+---------------------+ 
| articles   | 
| articles_categories | 
| bookmarks   | 
| categories   | 
| comments   | 
| drafts    | 
| extension_groups | 
| extensions   | 
| forum_tracks  | 
| forums    | 
| icon_items   | 
| icons    | 
| levels    | 
| management_groups | 
| management_logs  | 
| message_folders  | 
| message_tos   | 
| messages   | 
| moderators   | 
| posts    | 
| replies    | 
| reports    | 
| roles    | 
| roles_users   | 
| schema_migrations | 
| sessions   | 
| smiles    | 
| subscribes   | 
| system_configs  | 
| topic_tracks  | 
| topics    | 
| upload_files  | 
| users    | 
| users_forums  | 
| users_topics  | 
| warnings   | 
| word_replacements | 
+---------------------+ 
37 rows in set (0.25 sec) 

如何编写SQL?

+0

请尝试我的解决方案。希望这是你正在寻找的。 – 2012-02-12 16:20:40

+1

+1 for rails :) – 2012-02-12 17:00:28

+0

是的,它的一个rails bbs应用程序!我想添加前缀到一些列,但我应该检查哪种方式是最好的?更改数据库或更改我的代码。感谢您的回复^ _ ^ – Neo 2012-02-12 17:38:08

回答

1

您在这里只会更改的是您的数据库的名称(Table_NameColumn_Name已修复)。试试这个:

SELECT Table_Name, Column_Name 
FROM information_schema.columns 
WHERE table_schema = 'databaseName' -- <= Database Name Here 
HAVING CHAR_LENGTH(COLUMN_NAME) > 5 
ORDER BY Table_Name, Column_Name 

,或者您也可以选择所有字段

SELECT * 
FROM information_schema.columns 
WHERE table_schema = 'databaseName' -- <= Database Name Here 
HAVING CHAR_LENGTH(COLUMN_NAME) > 5 
ORDER BY Table_Name, Column_Name 
2
SELECT * 
    FROM INFORMATION_SCHEMA.COLUMNS 
    WHERE CHAR_LENGTH(COLUMN_NAME) > 5 
     AND TABLE_SCHEMA='YourDatabase'; 

未测试!找到this question并编辑查询。像这样的东西应该至少让你开始:)

1

只需查询INFORMATION_SCHEMA数据库:

mysql> connect information_schema; 
mysql> select table_name, column_name from columns where table_schema = 'bbs' and char_length(column_name) > 5; 

要考虑到CHAR_LENGTH(STR)会给你的字符数海峡有,而长度(STR)将导致str的字节大小。