使用ISNULL与LEAD函数时出现日期时间转换失败问题求助
解决“将字符串转换为日期和/或时间时失败”报错的方案
问题出在ISNULL函数的参数类型不匹配:LEAD(R.StartTime,1) OVER ( ORDER BY R.StartTime)返回的是datetime类型,而'No Next Lesson'是字符串类型。SQL Server会按照数据类型优先级,尝试把字符串隐式转换为datetime,这就导致了转换失败的报错。
解决方法
必须先将LEAD返回的日期时间值转换为字符串类型,再和字符串常量做替换判断:
方法一:使用CONVERT转换格式后配合ISNULL
ISNULL(CONVERT(VARCHAR(20), LEAD(R.StartTime,1) OVER ( ORDER BY R.StartTime), 120), 'No Next Lesson') as NextClass
其中120是日期格式代码,对应yyyy-mm-dd hh:mi:ss格式;如果只需要时间部分,可以换成108(对应hh:mi:ss),根据需求调整即可。
方法二:使用COALESCE(逻辑和ISNULL一致,同样需要先转换类型)
COALESCE(CONVERT(VARCHAR(20), LEAD(R.StartTime,1) OVER ( ORDER BY R.StartTime), 120), 'No Next Lesson') as NextClass
无论R.StartTime是datetime还是time类型,只要先把LEAD的结果转为字符串,就能避免隐式类型转换带来的报错。
内容的提问来源于stack exchange,提问作者Zedverse
相关产品推荐
相关产品推荐

