从字符串转换日期和/或时间时转换失败

我有一个相当简单的分页查询,用于从表中获取行

ALTER PROCEDURE mytable.[news_editor_paginate]

@count int,

@start int,

@orderby int

AS

BEGIN

SET NOCOUNT ON;

SELECT TOP (@count) * FROM

(

SELECT news_edits.*,

ROW_NUMBER() OVER (

ORDER BY CASE

WHEN @orderby = 0 THEN news_edits.[time]

WHEN @orderby = 1 THEN news_edits.lastedit

WHEN @orderby = 2 THEN news_edits.title

END

DESC

) AS num

FROM news_edits

) AS a

WHERE num > @start

END

@orderby参数决定结果应按哪一列排序。

news_edit.[time]news_edits.lastedit都是日期时间字段。但是news_edits.title是varchar字段。

对于两个datetime字段,查询运行都很好,但是当@orderby = 2出现以下错误时:

“从字符串转换日期和/或时间时转换失败。”

我遇到的问题是我没有尝试转换任何东西吗?

回答:

您需要将您的语句划分ORDER BY为多个CASE语句:

ORDER BY 

CASE WHEN @orderby = 0 THEN news_edits.[time] END DESC,

CASE WHEN @orderby = 1 THEN news_edits.lastedit END DESC,

CASE WHEN @orderby = 2 THEN news_edits.title END DESC

这是因为单个CASE语句要求所有分支都具有兼容的数据类型。由于一个字符串CASE无法转换为另一个字符串返回的日期时间CASE,因此会出现转换错误。

以上是 从字符串转换日期和/或时间时转换失败 的全部内容, 来源链接: utcz.com/qa/419962.html

回到顶部