Max(Date)不适用于SQL Server中的nvarchar

时间:2016-01-25 10:49:55

标签: sql-server-2008

我有Endtime类型的列名nvarchar(50),我正在尝试使用以下查询获取max(Endtime)

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

只要年份相同(2015年12月31日),结果就可以了,但是一旦我将一些数据与年份(2016年1月22日)放在一起,查询仍会显示最大值。 2015年而不是2016年。

我尝试了Max(cast(endtime as DateTime)),但这也会导致转换错误 我该如何解决这个问题?提前谢谢。

1 个答案:

答案 0 :(得分: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(将字符串转换为日期时间,对转换后的字段应用排序)

从您的评论中,您的日期字符串似乎以SQL格式109存储,所以让我们尝试将nvarchar转换回datetime,对其应用排序并输出结果:

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