选择特定列以及其余列

时间:2011-09-15 13:33:34

标签: mysql

我有一张包含很多列的表格。其中一些是DATETIME,我将其转换为带有UNIX_TIMESTAMP()的Unix时间戳。所以我不必从表中输入我想要的所有其他列,有没有办法做类似的事情:

SELECT UNIX_TIMESTAMP(t.start) AS start,
       UNIX_TIMESTAMP(t.end) AS end,
       t.theOtherColumns
FROM table t

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

当我这样做时,说,

SELECT UNIX_TIMESTAMP(t.start) AS start,
       UNIX_TIMESTAMP(t.end) AS end,
       t.theOtherColumns
FROM table t

选择startend两次。我只想从start返回endUNIX_TIMESTAMP()列,并从t.*集中排除这些列。

3 个答案:

答案 0 :(得分:4)

您可以使用this answer来帮助构建您想要的结果。

可能的解决方案看起来像

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;

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

答案 1 :(得分:2)

尝试t。*它可以在Oracle下运行。

答案 2 :(得分:1)

我认为没有办法按照你的建议做到这一点,但你可以这样做

SELECT t.*, UNIX_TIMESTAMP(t.start) AS start, UNIX_TIMESTAMP(t.end) as end ...