我有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))
,但这也会导致转换错误
我该如何解决这个问题?提前谢谢。
答案 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