【问题标题】:Error in date conversion when I use join使用 join 时日期转换出错
【发布时间】:2017-08-05 07:50:03
【问题描述】:

这是我的查询,效果很好:

select convert(date,convert(varchar,dd.effdate),111)  kk       
from INS_VW_Return  dd  --join  MS_Account qq    on (dd.accountno ='0'+qq.Class_Account)
 where dd.accountno in (select '0'+t.Class_Account 
                       from INS_Insurance_Status t 
                       where t.Insurance_Status=0
                       )
 and  dd.importdate = cast(getdate() as date)
 and dd.effdate<= cast(convert(VARCHAR(10),getdate(),112) as int)

但问题是,如果我取消注释 MS_Account,查询将返回以下错误:

Msg 241, Level 16, State 1, Line 1
Conversion failed when converting date and/or time from character string.

如果我删除转换功能并放置一个字段(如 dd.effdate)或再次注释掉 MS_Account,它将正常工作。

我不知道为什么会这样,因为正如您所见,在 select 语句和转换过程中没有与该表相关的内容。我需要提一下,两个查询的 count(*) 是相同的。

您可以通过以下链接查看一些信息:

https://drive.google.com/open?id=0B6O9rKqbTANzVWJSbHVRWnRlVUk

https://drive.google.com/file/d/0B6O9rKqbTANzLUV2QTlUODlkZ0U/view

【问题讨论】:

  • 你能分享表格架构和一些重现问题的示例数据吗?
  • 您可以使用此链接查看查询结果:drive.google.com/open?id=0B6O9rKqbTANzLUV2QTlUODlkZ0U
  • 我希望我能帮助你获得这些信息,但恐怕我不能。如果您有时间,并且由于您是 SO 新手(欢迎!),请查看 How to create a Minimal, Complete, and Verifiable example
  • 什么是INS_VW_Return?是VIEW 吗? SQL Server 以以意想不到的顺序执行事物而闻名。 SQL 不是一种语言,您可以在其中告诉引擎执行此操作,而不是执行此操作,然后执行此操作... 它是一种 这就是我想要的,做任何需要的事情-语言。很可能在您的查询中您认为这是在 转换 之后执行的位置,但事实并非如此。请提供更多详细信息。
  • dd.effdate 的数据类型是什么?它是没有标点符号的日期的 INT 表示形式吗?

标签: sql sql-server date type-conversion


【解决方案1】:

您的联接很可能在日期字段中添加空记录。向 select 查询添加一个 null 处理程序,以在日期因连接为 null 时提供日期。

【讨论】:

猜你喜欢
  • 2015-08-05
  • 2016-12-14
  • 2013-08-29
  • 2014-06-18
  • 2014-10-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多