按日期列降序排序时从字符串转换日期和/或时间时转换失败

问题描述 投票:0回答:1

在复杂查询中按降序排序时出现转换错误。我将其归纳为以下内容:

DECLARE @sortBy VARCHAR(25) = 'Route'
DECLARE @sortDirection VARCHAR(25) = 'DESC'

select * from dbo.headers
order by case when @sortDirection = 'DESC' then
    case
        when @sortBy = 'Route' then route
        when @sortBy = 'DateCompleted' then dateCompleted
    end
end desc

奇怪的是,当我将顺序反转为升序时,它工作正常。如果我将

sortBy
变量更改为“DateCompleted”,它也可以正常工作。

希望能在这里提供一些意见,因为我至少花了几个小时试图弄清楚。

我尝试过颠倒排序顺序,效果很好。但我想按降序排列,导致转换错误。 dateCompleted 列是可为空的日期时间。

sql-server t-sql
1个回答
0
投票

这可能是因为它试图将“路由”转换为 DATE 或 DATETIME 或“dateCompleted”的任何数据类型。

您可以尝试 CONVERT(NVARCHAR(30), dateCompleted, 121)

© www.soinside.com 2019 - 2024. All rights reserved.