2017-09-14 35 views
0

使用SQL Server 2014,我有一个存储为datetime的名为LAST_BASELINE_UPDATE_DATE的日期字段。转换为mm/dd/yyyy并选择最大值

我使用CONVERT函数将转换为mm/dd/yyyy

convert(date,LAST_BASELINE_UPDATE_DATE,101) as BASELINE_UPDATE_DATE 

我希望能够做的就是然后选择BASELINE_UPDATE_DATEMAX值,而无需创建一个表什么。这甚至有可能吗?

+1

为什么你想将它转换为一个字符串,然后*然后*找到MAX?如果它存储为'DATETIME',则执行'MAX(LAST_BASELINE_UPDATE_DATE)'。 – Siyual

+2

当然,只是在max()中包装 – scsimon

+0

如果我不转换,那么我得到每个记录,而不是最大值。 –

回答

2

从你的文章中发现你的数据是什么以及你想要摆脱的是什么。这里有几个解决方案,希望其中一个是适用

假设你希望你的结果为一个字符串格式为mm/dd/yyyy的,你可以做到这一点

select convert(varchar(10), max(LAST_BASELINE_UPDATE_DATE), 101)) 
from YourTable 

如果你只需要它作为一个日期,只是做

select max(LAST_BASELINE_UPDATE_DATE) 
from YourTable 

如果LAST_BASELINE_UPDATE_DATE已经一个字符串(格式为mm/dd/yyyy),并且想把它作为一个日期,

select max(convert(date, LAST_BASELINE_UPDATE_DATE, 101)) 
from YourTable 
+0

经过一些挖掘后,我看到LAST_BASELINE_UPDATE_DATE的属性是datetime,长度是8,但数值精度是23.我猜这就是为什么MAX不按照我的预期工作。 –

1

我觉得你很复杂。只需在最大日期时间值上进行转换。

declare @table table (LAST_BASELINE_UPDATE_DATE datetime) 
insert into @table 
values 
('20160701 12:21'), 
('20160705 03:21'), 
('20160401 19:21'), 
('20161201 04:21') 

select 
    convert(varchar(10),max(LAST_BASELINE_UPDATE_DATE),101) 
from 
    @table 

此方法转换的单个返回的行,这是您的日期时间的列的最大()值,相对于每一行和转换然后找到最大值。

+0

似乎很简单,但这些选项都不起作用,这可能是数据真正存储的方式。如果我将数据存储在一个临时表中,然后使用select LAST_BASELINE_UPDATE_DATE =(从临时表中选择MAX(LAST_BASELINE_UPDATE_DATE),那么它工作正常。试图弄清楚为什么我必须在max work之前将数据存储在临时表中正确。 –

+0

@LisaRose好吧,如果数据类型是datetime我的解决方案将工作。我提供了一个示例。你把它存储为一个varchar? – scsimon