2011-03-14 79 views
1

我试图从MySQL 5.5(社区服务器)中有总共22个字段的表中获取记录,第一个字段的类型是DATETIME,而我想要使用DATE_FORMAT()方法格式化该字段,而我想要按原样提取其余字段。所以基本上我想要做的就是这样的事情SQL选择单个字段作为通配符的字段和剩余字段的查询

SELECT DATE_FORMAT(fdate,'%r %d-%m-%Y'),* FROM userdetails;

虽然我知道这是无效的语法,和我目前选择手动所有剩余的字段这显然使得查询不再实现这一。那么有没有更好的方法来做同样的事情?我也想过用两个不同的查询,其中第一个将获取格式化的日期和第二将是平常

SELECT * FROM userdetails;

但因为我取按日期字段本身进行排序的记录,我想用两个不同的查询可能会导致冲突按照返回的记录顺序。

回答

2

您可以使用

SELECT DATE_FORMAT(fdate,'%r %d-%m-%Y'), ud.* 
FROM userdetails ud 

这将选择所有列(包括原fdate)与格式化的值一起。

没有办法选择“几乎所有列”,除非明确列出它们。

+0

谢谢!它工作的非常好...... – Kushal 2011-03-14 17:08:14

2

为什么不在应用程序代码中进行日期格式化?让数据库处理数据并让应用程序处理演示。

0
DATA_FORMAT(fdate,'%r %d-%m-%Y')..... 

不会工作

DATE_FORMAT(fdate,'%r %d-%m-%Y').... 
0
SELECT DATE_FORMAT(fdate,'%r %d-%m-%Y') AS `formattedDate` , * FROM userdetails; 

这应该做的伎俩。不能证明为什么你的第一次努力失败,你应该检查它返回的字段名称 - 怀疑你会发现一个名为DATE_FORMAT(...

1

在MySQL中,你可以反转它,并把*首先,然后列你只需要指定两列fdate列如果你在Perl中使用哈希,或者在PHP中使用关联数组或其他语言中的等价关系来获取行,那么你最终会覆盖该索引。

对付它最好的办法是name列:

SELECT *, DATE_FORMAT(fdate,'%r %d-%m-%Y') AS formatted_date FROM userdetails; 

现在你基本上有两个日期列,你只要当你想使用你的日期时使用了命名的。

+0

语法无效,你需要在表中加上'*'前缀。 – Quassnoi 2011-03-14 16:04:41

+0

@ Quassnoi-你是对的。在MySQL中,您不必预先指定表别名,但必须先指定它,然后再指定其他列。更新以反映 – Cfreak 2011-03-14 16:28:02