2011-09-15 14 views
2

私は多くの列を持つテーブルを持っています。これらのうちのいくつかはDATETIMEです。私はUNIX_TIMESTAMP()でUnixのタイムスタンプに変わります。だから私は、私はテーブルから望む他のすべての列を入力する必要はありません、のようなものを行うための方法があります:特定の列と残りの列を選択してください

t.theOtherColumnsは、テーブル内の列の残りの部分である
SELECT UNIX_TIMESTAMP(t.start) AS start, 
     UNIX_TIMESTAMP(t.end) AS end, 
     t.theOtherColumns 
FROM table t 

。さらに説明する。私は、テーブルからすべての列を選択し、それらのいくつかの操作を実行するが、各列名をクエリに入力しない。

、私が言うのですか、

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

それは二回startendを選択します。 startendの列をUNIX_TIMESTAMP()から戻し、その列をt.*のセットから除外したいだけです。

+0

@Zoltan - しかし、それは 't、start'と' t.end'も戻します。この質問に対する答えは「いいえ」です。BTW –

+0

わかりました。私はそれが可能であることを考えないでください... – HamoriZ

+0

それは大丈夫です。しかし、頼む価値がある。 – Bojangles

答えて

1

私はあなたが示唆したようにこれを行う方法があると信じていませんが、あなたがこれを行うことができます

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

これを行う方法があります。 [以下の私の答えを参照してください。](http://stackoverflow.com/a/13880100/1639910) – donL

1

はトンを試してみてください。*それはオラクルの下で動作します。

2

できることは、this answerを使用して必要な結果を作成することです。

可能な解決策は、あなたのテーブルtを含むスキーマの名前でテストを置き換え*

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; 

ようになります。

関連する問題