【问题标题】:How to fix a conversion failed error for date?如何修复日期的转换失败错误?
【发布时间】:2019-03-18 17:05:47
【问题描述】:

我的查询出现以下错误,但不确定是什么原因:

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

这是在 SQL Server 2012 中出现错误的行:

(CONVERT(DATE, (CONVERT(varchar, A.[Month-Bcast]) + ' 1 ' + CONVERT(varchar, A.[Year-bcast])))) AS [Last Update]

[月-Bcast] = varchar(20), null
[年份-bcast] = varchar(20), null

【问题讨论】:

  • 我们需要知道导致转换失败的价值。您是否考虑改用TRY_CONVERT
  • 我们在谈论什么价值?您是说将上面一行中的所有转换都替换为 try_convert 吗?
  • 您尝试转换为date 的值。我们无法访问您的服务器,也无法看到您看到的内容;我们只知道您遇到了错误,但我们不知道导致该错误的值(因为您没有共享它)。如果您可以向我们展示导致转换错误的值,我们可以帮助您调试原因。#
  • 所以值是 [Year-bcast] = varchar(20), null),并且只是“2018”、“2017”、“2016”等 [Month-Bcast] = varchar(20 , null) 值为“Jan”、“feb”、“Mar”、“Apr”等
  • 这些值都不会产生错误。 db<>fiddle。如果它是这些值之一,那是因为其中一列的值无效,例如 'Jsn' 而不是 'Jan'

标签: sql-server sql-server-2012


【解决方案1】:

您的错误不可重现。

以下测试:

SELECT (CONVERT(DATE, (CONVERT(varchar, 'Oct') + ' 1 ' + CONVERT(varchar, '2017')))) 

不产生错误,并导致:

2017-10-01

错误必须在代码的另一部分,或者由于表中的某些数据超出了您的描述(有效的月份/年份)

【讨论】:

  • 您认为这可能是因为数据过多吗?我做了一些测试..首先我尝试在其他地方使用该查询,并且像您的测试一样,它在其他地方工作,但不适用于这个查询第二我尝试删除上面的这个转换行,这个查询工作告诉我这个有一些问题代码行..我尝试用“TRY_CONVERT(date(”)测试它,所以让我们看看它是否有效
  • 不,我不认为这可能是太多的数据。更有可能是特定的数据。
  • 所以看起来像 (try_CONVERT(DATE, (CONVERT(varchar, A.[Month-Bcast]) + ' 1 ' + CONVERT(varchar, A.[Year-bcast])))) AS [上次更新] 处理前 1000 行并提取数据,所以如果完整查询有效,请告诉我。
猜你喜欢
  • 2015-12-05
  • 1970-01-01
  • 1970-01-01
  • 2022-06-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多