加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

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

发布时间:2020-12-12 08:51:52 所属栏目:MsSql教程 来源:网络整理
导读:我有一个相当简单的分页查询,用于从表中获取行 ALTER PROCEDURE mytable.[news_editor_paginate] @count int,@start int,@orderby intASBEGIN SET NOCOUNT ON; SELECT TOP (@count) * FROM ( SELECT news_edits.*,ROW_NUMBER() OVER ( ORDER BY CASE WHEN @or
我有一个相当简单的分页查询,用于从表中获取行
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都是datetime字段.但是news_edits.title是一个varchar字段.

查询对于datetime字段运行正常,但是当@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返回的日期时间,所以您会收到转换错误.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读