如何从MySQL中提取列名和类型?

时间:2018-10-04 08:42:36

标签: mysql sql

我有一张桌子,如下:

CREATE TABLE `orders` (
  `orders_id` int(11) NOT NULL AUTO_INCREMENT,
  `external_id` bigint(20) unsigned NOT NULL DEFAULT '0',
  `id` int(11) NOT NULL,
  `name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `company` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `street_address` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `suburb` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
...
)

我想获取列并像这样输入Name : Type,作为单列:

orders_id:int(11),
external_id:bigint(20),
id:int(11),
...

应该是这样的:

SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = 'my_schema' AND TABLE_NAME = 'orders';

我不确定如何获取类型以及如何将其转换为所需的输出

2 个答案:

答案 0 :(得分:1)

使用以下查询

SELECT SELECT concat(concat(concat(column_name,':'),data_type),',') as columnval
FROM information_schema.columns where TABLE_SCHEMA = 'my_schema' AND TABLE_NAME = 'orders'

编辑:(通过戈登)

如果以上内容正确无误,则应写为:

SELECT concat(column_name, ':' data_type ',') as columnval
FROM information_schema.columns 
WHERE TABLE_SCHEMA = 'my_schema' AND TABLE_NAME = 'orders';

答案 1 :(得分:1)

使用此请求:

SELECT
    concat(COLUMN_NAME, ':', DATA_TYPE, IF(NUMERIC_PRECISION, CONCAT('(', NUMERIC_PRECISION, ')'), IF(CHARACTER_MAXIMUM_LENGTH, CONCAT('(', CHARACTER_MAXIMUM_LENGTH, ')'), ''))) as name
FROM
    INFORMATION_SCHEMA.COLUMNS;

结果:

+----------------------+
| name                 |
+----------------------+
| id:int(10)           |
| co_id:int(10)        |
| EVP_type:varchar(255)|
| date:date            |
+----------------------+