当前位置: 首页 > 面试题库 >

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

姬慎之
2023-03-14
问题内容

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

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,因此会出现转换错误。



 类似资料:
  • 问题内容: 我试图创建一个表,如下所示, 首先,我尝试如下插入值, 它给出了错误的说法, 无法将varchar转换为日期时间 然后,我尝试使用以下格式作为我们stackoverflow建议的帖子之一, 但是我仍然收到错误消息, 从字符串转换日期和/或时间时转换失败 有什么建议? 问题答案: SQL Server支持多种格式-有关CAST和CONVERT的信息,请参见MSDN联机丛书。这些格式中的大

  • 问题内容: 在SQL 9(2005)中创建了一个存储过程,此后已升级到SQL 10(2008)。从那时起,以下存储过程停止工作并引发上述错误: 传入的参数@vPortalUID包含:2A66057D-F4E5-4E2B-B2F1-38C51A96D385。我执行这样的存储过程: 它跌倒了。我也尝试过转换。仍然没有喜悦。也具有将{}括起来的价值。我如上所述以编程方式和手动方式删除了这些内容。 如果您

  • 问题内容: 我在mysql中使用NOW()获取当前日期和时间。我想将日期值转换为varchar并将其与另一个字符串连接。我该怎么做? 问题答案: 使用DATE_FORMAT()

  • 问题内容: 例如字符串: 我将把它们推回到数据库中正确的日期时间字段中,因此我需要将它们魔术化为实际的日期时间对象。 这是通过Django的ORM进行的,因此我无法使用SQL进行插入时的转换。 问题答案: 是将字符串解析为日期时间的主要例程。它可以处理各种格式,格式由你为其指定的格式字符串确定: 生成的对象是时区未使用的。 链接: 适用于strptime:Python 2和Python 3的 Py

  • 问题内容: 将日期转换为JSON时,javascript会以以下格式保存日期: 但是,我不确定如何将其放入python datetime对象。我已经尝试过这些: 我相信javascript会将字符串保存为官方ISO格式,因此似乎应该有一种方法可以让python 读取它? 问题答案: 请尝试以下格式: 例如: 该的日期只是手段,它应该被解释为UTC时间,所以忽略它不会造成任何信息丢失。您可以在这里找

  • 问题内容: 我试图将字符串转换为日期时间对象。我从新闻提要中获取的字符串格式如下:“星期四,2014年10月16日美国东部时间01:16:17” 我尝试使用datetime.strptime()进行转换。即 并得到以下错误: 追溯(最近一次通话最近): 文件“”,第1行,位于datetime.strptime(’Thu,16 Oct 2014 01:16:17 EDT’,’%a,%d%b%Y%H: