SQL选择具有字符限制的所有列

时间:2012-12-28 06:02:54

标签: php mysql sql select

我正在创建一个类似于phpMyAdmin的自定义脚本。

我需要使用星号(*)才能在不知道列的情况下选择表中的所有数据。诀窍在于我必须限制从每列中检索的数据量以提高效率。基本上这样做,

SELECT SUBSTR(Username, 20) FROM Users LIMIT 10

将Username列限制为 20个字符,但我必须同时执行此操作

SELECT SUBSTR(*, 20) FROM Users LIMIT 10

如何在使用星号时选择每列上具有特定字符限制的所有数据?

4 个答案:

答案 0 :(得分:2)

您必须指定要撤消的所有列。

SELECT SUBSTR(Username,20) as user, SUBSTR(Column2,20) as col, FROM Users LIMIT 10

你不能以你想要的方式在mysql函数中使用星号。每列都必须受到限制。

答案 1 :(得分:2)

SELECT SUBSTR(COL1,20), SUBSTR(COL2,20),SUBSTR(COL3,20), .... FROM Users LIMIT 10

您必须明确限制每列。

答案 2 :(得分:2)

另一种方法是创建动态SQL,唯一需要的是

  • 数据库名称
  • 表名

以下是查询:

SET @db = 'db_2_a8d87';   -- database name
SET @tb = 'Table1';       -- table name
SET @sql = NULL;
SELECT GROUP_CONCAT(CONCAT('SUBSTRING(',column_Name,',1,3)', column_Name)) INTO @sql
FROM   information_schema.columns
WHERE  table_schema = @db AND table_name = @tb;

SET @sql = CONCAT('SELECT ', @sql, ' FROM ', @tb);

PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

答案 3 :(得分:1)

作为替代方案,您可以分两部分来完成。对于第一部分,运行:

SHOW COLUMNS IN Users;

然后使用该查询的Field列中的结果以编程方式生成第二个查询,选择第一个查询中返回的每个列名。

相关问题