根据information_schema中的column_type更改选择值

时间:2012-10-11 21:55:01

标签: mysql

好吧,我打算快点。下面我有一个选择向我显示所有具有tinyint data_type的column_names。使用下面返回的数据,我需要编写一个从my_table中选择的封闭查询并更改SELECT数据的输出,我怀疑CASE时使用tinyint 0为否,1为是。

    SELECT 
        COLUMN_NAME
    FROM
        INFORMATION_SCHEMA.COLUMNS
    WHERE
        table_name = 'my_table'
    AND DATA_TYPE = 'tinyint'

谢谢!

1 个答案:

答案 0 :(得分:1)

您在样本中的查询:

create table a ( i tinyint, b char(5));

SELECT 
        COLUMN_NAME,
        case  DATA_TYPE 
        when 'tinyint' then 'Yes' 
                       else 'No' 
        end    
    FROM
        INFORMATION_SCHEMA.COLUMNS
    WHERE
        table_name = 'a';

Results

已编辑因为OP失去了信仰。

嗨大人,相信我你不想要!好的...欢迎来到动态sql的黑暗面:

create table a ( i tinyint, b char(5));
insert into a values (1,'si'),(0,'no');
SELECT @a := 
        concat( 
          'select ', 
          group_concat( 
            case  DATA_TYPE 
            when 'tinyint' then concat(
                                 'if( '       ,
                                 COLUMN_NAME           ,
                                 ' = 0, \'No\', \'Yes\' )'
                                )
                           else COLUMN_NAME            
            end                      
          ),
          ' from ',
          table_name ,
          ';'
        )
    FROM
        INFORMATION_SCHEMA.COLUMNS
    WHERE
        table_name = 'a';    
PREPARE stmt FROM @a;
EXECUTE stmt;

Results

| IF( I = 0, 'NO', 'YES' ) |  B |
---------------------------------
|                      Yes | si |
|                       No | no |