2016-01-25 78 views
0

nvarchar(50)类型的列名Endtime,我试图通过使用下面的查询来获取max(Endtime)最大(日)不工作的nvarchar的SQL Server中

select COALESCE(CONVERT(nVARCHAR(50), MAX(EndTime), 103), '-') AS EndTime from dbo.vwJobHistory 

的结果是罚款,只要因为年份是相同的(2015年12月31日),但只要我在年份(01/22/2016)中输入一些数据,查询仍显示最大值。 2015年的日期而不是2016年。

我试过Max(cast(endtime as DateTime))但这也给转换错误 我该如何解决?提前致谢。

+0

MAX应该应用于DATE而不是NVARCHAR –

+0

在'CONVERT'之前移动'MAX'。如果你有能力适当地改变列Endtime的类型。 –

+0

@Adriano我已经使用了MAX和日期本身.. – Emma

回答

0

我无法找到你上面的查询错误,但这里是你如何可以编写查询的另一种方法:

select top 1 COALESCE(CONVERT(nVARCHAR(50), EndTime, 103), '-') AS EndTime 
from dbo.vwJobHistory 
order by endtime desc 

更新1(澄清表结构)

目前还不清楚您的日期时间数据当前是否存储在nvarchar(50)字段内,或者是否要将日期时间数据转换为nvarchar(50)。 你可以运行下面的查询并用结果更新你的问题吗?

SELECT 
COLUMN_NAME, DATA_TYPE, col.CHARACTER_MAXIMUM_LENGTH 
FROM INFORMATION_SCHEMA.COLUMNS col WHERE TABLE_NAME LIKE 'vwJobHistory' 

是否也能使用

SELECT endtime FROM dbo.vwJobHistory 

更新2从表中张贴的样本行(字符串转换为datetime,应用排序上转换场)

来自你的评论,似乎你的日期字符串存储为SQL格式109,所以让我们尝试将nvarchar转换回日期时间,对其进行排序并输出结果lt:

SELECT * FROM (
    SELECT 
    convert(datetime, EndTime, 109) endtimeconverted, 
    * 
    FROM vwJobHistory 
) xyz 
ORDER BY endtimeconverted DESC 
+0

我返回相同的值12 31 2015 1:02:07:000AM。但它应该返回最新的日期,即01/25/2016 – Emma

+0

我认为您的vwJobHistory表中的数据有问题,即2016年的数据尚未提交。你的表格包含多少行? – SaschaM78

+0

该表包含大约1715行。 – Emma