5

I'm mapping data from a MySQL table and have a table that has over 50 columns and over 100,000 rows, and I need to map a column that has data in it which has 4 characters or less.

How can I get a list of all columns in the table which have data that contains only four characters or less? In my case, all columns are varchar(255).

4

4 に答える 4

1
SELECT
  COLUMN_NAME

FROM INFORMATION_SCHEMA.COLUMNS

WHERE TABLE_NAME = <table>
AND CHAR_LENGTH(COLUMN_NAME) <= 4
于 2012-09-24T12:02:56.987 に答える
0

これは、ストアドプロシージャを介して実行できます。

  1. テーブルから重要なすべての列名を選択し、一時テーブルに格納します。
  2. それらをWHILEまたはREPEATループで繰り返し、SELECT LENGTH(column_name)FROMテーブルを実行します。
于 2012-09-24T12:41:22.640 に答える
0

これにより、名前が 4 文字以下の列が得られます。

SHOW COLUMNS FROM table WHERE CHAR_LENGTH(Field) < 5

table上記のSQLでは、テーブルの名前に置き換えるだけで済みますField。これはリテラルであり、そのままにしておく必要があります。

更新:
4 文字以下の列の内容が必要な場合は、次のようにすることができます。

select * from table where CHAR_LENGTH(column_name) < 5
于 2012-09-24T12:01:21.877 に答える
0

INFORMATION_SCHEMA.COLUMNSからの情報を使用して動的クエリを作成し、それを実行する必要があると思います。テストされていませんが、次のようなものです:

SET @s = 'SELECT GROUP_CONCAT(X) AS FOUR_CHAR_COLS, ID FROM (' + 
        (SELECT GROUP_CONCAT('SELECT CASE WHEN CHAR_LENGTH(`' + COLUMN_NAME + 
        '`) <= 4 THEN ''' + COLUMN_NAME + ''' ELSE NULL END AS X, ID FROM MyTableName' 
          SEPARATOR ' UNION ALL ')
        FROM INFORMATION_SCHEMA.COLUMNS
        WHERE TABLE_NAME = 'MyTableName') + 
    ') XX GROUP BY ID';

PREPARE stmt FROM @s;
EXECUTE stmt;

これにより、各行に 4 文字以下のすべての列がリストされます。

于 2012-09-24T12:21:02.760 に答える