1

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

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

SELECT SUBSTR(Username, 20) FROM Users LIMIT 10

这将用户名列限制为20 个字符,但我必须像这样同时完成所有操作

SELECT SUBSTR(*, 20) FROM Users LIMIT 10

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

4

4 回答 4

2

您必须指定要检索的所有列。

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

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

于 2012-12-28T06:06:32.307 回答
2

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

您必须明确限制每一列..

于 2012-12-28T06:08:24.040 回答
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;
于 2012-12-28T06:18:01.713 回答
1

作为替代方案,您可以分两部分执行此操作。对于第一部分,运行:

SHOW COLUMNS IN Users;

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

于 2012-12-28T06:11:53.780 回答