我有一张包含很多列的表格。其中一些是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
选择start
和end
两次。我只想从start
返回end
和UNIX_TIMESTAMP()
列,并从t.*
集中排除这些列。
答案 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 ...