选择特定的列以及其余的列

Boj*_*les 4 mysql

我的桌子上有很多列。其中一些是DATETIME,我将其转换为Unix时间戳UNIX_TIMESTAMP()。因此,我不必从表中键入我想要的所有其他列,是否可以执行以下操作:

SELECT UNIX_TIMESTAMP(t.start) AS start,
       UNIX_TIMESTAMP(t.end) AS end,
       t.theOtherColumns
FROM table t
Run Code Online (Sandbox Code Playgroud)

t.theOtherColumns表格中其余的列在哪里。进一步解释;我想从表中选择所有列,对其中的某些列执行操作,但不要在查询中键入每个列的名称。

当我说时

SELECT UNIX_TIMESTAMP(t.start) AS start,
       UNIX_TIMESTAMP(t.end) AS end,
       t.theOtherColumns
FROM table t
Run Code Online (Sandbox Code Playgroud)

它选择startend的两倍。我只想从中返回startendUNIX_TIMESTAMP(),并从t.*集合中排除这些列。

don*_*onL 5

您可以使用此答案来帮助构建所需的结果。

一个可能的解决方案看起来像

SET @sql = CONCAT('SELECT UNIX_TIMESTAMP(t.start) AS start, UNIX_TIMESTAMP(t.end) as end,', (SELECT GROUP_CONCAT(COLUMN_NAME) FROM 
information_schema.columns WHERE table_schema = 'test' AND table_name = 
't' AND column_name NOT IN ('start', 'end')), 
' from test.t');  
PREPARE stmt1 FROM @sql;
EXECUTE stmt1;
Run Code Online (Sandbox Code Playgroud)

*将测试替换为包含表t的架构的名称。


Bri*_*laz 1

我不相信有办法按照你的建议做到这一点,但你可以这样做

SELECT t.*, UNIX_TIMESTAMP(t.start) AS start, UNIX_TIMESTAMP(t.end) as end ...
Run Code Online (Sandbox Code Playgroud)