gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 10:45:08 25 4
gpt4 key购买 nike

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

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 字段。

查询对于两个日期时间字段都运行良好,但是当@orderby = 2时,我收到以下错误:

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

我遇到的问题是我没有尝试转换任何内容?

最佳答案

You'll need to divide your ORDER BY into multiple CASE statements:

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 返回的日期时间,因此您会收到转换错误。

关于sql - 从字符串转换日期和/或时间时转换失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10002401/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com