【问题标题】:Error when using DateAdd - TSQL使用 DateAdd 时出错 - SQL
【发布时间】:2014-06-16 14:59:03
【问题描述】:

我有一个应用程序使用一个表,该表有一个varchar[BadColumn],该列由MM/DD/YYYY 格式的日期填充,或者至少大多数行都包含该列。

我无法控制修改此表和更改数据类型。

我需要报告此数据以显示一周内的行。

这是我的问题:

每次我使用某些东西来比较/过滤日期时都会出错

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

所以这是我迄今为止尝试过的:

  1. 尝试创建一个视图,其中[BadColumn] 被转换为Date 类型列[NewBadColumn],并使用Convert(date, BadColumn) 将原始表中的值转换为日期类型。视图被填充,但现在当我仍然尝试使用 DateADD 进行查询或进行任何日期比较时,我得到了同样的错误。

  2. 我也尝试使用Convert(Date, BadColumn, 105),但同样的问题。

  3. 我尝试了其他格式,但同样的问题仍然无法对该列进行日期比较。

我不确定是哪一行引发了错误,如何找到并解决此问题。

感谢您的回复。我曾尝试使用 ISDate 函数来查找不良记录。 但是当我尝试使用 DateAdd 时,我仍然收到相同的错误“从字符串转换日期和/或时间时转换失败。”。

这是我正在使用的代码:

选择 t.* 从 (Select * from dbo.BadTableName q with (nolock) 其中 ISDate(BadColumn)=1 且 ISDATE(BadColumn) 不为空 ) 吨 其中 t.BadColumn > DATEADD(dd,-2, GetDATE())


任何帮助表示赞赏。

【问题讨论】:

标签: sql-server-2008 dateadd


【解决方案1】:

尝试使用ISDATE() 函数检查列。您可以在不先创建视图的情况下执行此操作。

IF ISDATE(YourColumn) = 1
DATEADD (datepart , number , YourColumn )
ELSE 'No valid date provided'

【讨论】:

  • 我使用了 ISDate 并失败,在问题中发布了更多信息
  • 你看过ISDATE()的局限性吗?如果表达式是有效的日期、时间或日期时间值,则返回 1;否则为 0。如果表达式是 datetime2 值,则 ISDATE 返回 0。删除子选择的第二个条件应该可以解决问题。
【解决方案2】:

查看其他堆栈溢出问题和答案

Find invalid dates in SQL Server 2008

您可以使用 ISDATE 函数来测试各个行。

【讨论】:

  • 我使用了 ISDate 并失败,在问题中发布了更多信息
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-26
  • 1970-01-01
  • 1970-01-01
  • 2012-08-21
相关资源
最近更新 更多