【问题标题】:How to circumvent error Message 241 (Conversion failed when converting date and/or time from character string)如何规避错误消息 241(从字符串转换日期和/或时间时转换失败)
【发布时间】:2019-04-03 01:31:01
【问题描述】:

我只是想按我的获取日期列进行排序,该列具有这种格式的日期:'04/02/2019' 等...我在一个新表中创建了名为 ACQ_DATE_CONVERTED 的列,我通常会得到这样的结果如:2019-04-02。相反,我得到了

错误消息 241(从字符串转换日期和/或时间时转换失败)

我尝试了以下方法:

SELECT [ITEM], [ACQ_DATE],

CONVERT(DATE,[ACQ_DATE]) AS ACQ_DATE_CONVERTED
,'    ' AS MFG
INTO [ABC].[dbo].[My_Store_records_CONVERTED]
FROM [ABC].[dbo].[My_Store_records]

在我的结果之后,我然后通过ACQ_Date_Converted 订购。

SELECT [ITEM], [ACQ_DATE]
FROM [ABC].[dbo].[My_Store_records_CONVERTED]
ORDER by [ACQ_DATE_CONVERTED]

我的预期结果在表格中应该如下所示:

       Column_A    Column_B       ColumnC
Rows   ITEM        ACQ_DATE       ACQ_DATE_CONVERTED
1.     ITEM_1      04/09/2007     2007-04-09
2.     Store item  01/26/2008     2008-01-26
etc...

【问题讨论】:

  • 请用您的 RDBMS 标记问题,您知道哪些行失败了吗?
  • 嗨 Joakim,这是确切的消息:Msg 241, Level 16, State 1, Line 2 从字符串转换日期和/或时间时转换失败。
  • 我的意思是数据库中的哪一行
  • 对不起,所有行都失败了。另外,您能告诉我什么是 RDBMS,以便我可以在我的问题中添加标签。 (对不起,我是新手。)
  • 您使用的是什么数据库?这就是我要问的

标签: sql oracle


【解决方案1】:

您能否尝试以下查询:

REPLACE(CONVERT(VARCHAR(10), [ACQ_DATE], 111), '/', '-') AS ACQ_DATE_CONVERTED

由于您是从ACQ_DATE 转换的,所以您可以使用ORDER BY [ACQ_DATE],它会起作用。

Demo on DB Fiddle

【讨论】:

  • 几乎解决了我的问题;我需要在 [ACQ_DATE_CONVERTED] 最旧到最近之前订购。
  • @Dexter 请使用相同的演示找到更新的答案。
【解决方案2】:

感谢所有为此问题提供意见的人。

我发现在我想要排序的列的所有单元格中都有一个隐藏字符;因此,导致每一行都失败。但是,通过以下内容,我能够克服这个绊脚石。我希望任何遇到此问题的人都会发现下面的解决方案很有帮助。

删除隐藏字符。

, REPLACE([ACQ_DATE], CHAR(10),'') AS [ACQ_DATE_CONVERTED]
,'    ' AS MFG
INTO [ABC].[dbo].[My_Store_records_CONVERTED]
FROM [ABC].[dbo].[My_Store_records]

并按 ACQ_DATE_Converted 对新表进行排序;

ALTER TABLE [ABC].[dbo].[My_Store_records_CONVERTED] ALTER COLUMN [ACQ_DATE_CONVERTED] DATE NULL;

当然还有;

ORDER by [ACQ_DATE_CONVERTED]

最好的问候, 敏捷

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-08-06
    • 2016-08-21
    • 1970-01-01
    • 2020-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多