2

我有以下查询:

select A.ACCOUNT_NUM,
       convert(date, B.EFFECTIVE_DATE, 112) as 'EFFECTIVE_DATE',
       B.INTEREST_RATE
from Table1 A
left join Table2 B
on A.ACCOUNT_NUM = B.ACCOUNT_NUM

ACCOUNT_NUM 在两个表中都是 varchar(12),EFFECTIVE_DATE 是 varchar(8),格式为“20131018”这给了我一个“转换日期和/或时间字符串时转换失败”。如果我在没有转换的情况下运行查询,它运行良好。

但是,我已经使用 ISDATE() 检查了 EFFECTIVE_DATE 的内容,并且没有问题。另外,如果我执行以下操作:

select A.ACCOUNT_NUM,
       B.EFFECTIVE_DATE,
       B.INTEREST_RATE
into #temp
from Table1 A
left join Table2 B
on A.ACCOUNT_NUM = B.ACCOUNT_NUM


select convert(date, EFFECTIVE_DATE, 112)
from #temp

它正确地将列转换为日期格式,没有错误。请问我错过了什么,这让我发疯了,我敢肯定这是非常简单的事情!

谢谢

4

2 回答 2

1

当您存储DATE STRING type fields. 您的列中可能有一两个字符串不能转换为日期。试试这个,CASE看看你是否得到数据。

SELECT A.ACCOUNT_NUM,
       CASE WHEN ISDATE(B.EFFECTIVE_DATE) THEN CONVERT(DATE, B.EFFECTIVE_DATE, 112) 
            ELSE CONVERT(DATE, '20000101', 112) END AS 'EFFECTIVE_DATE',
       B.INTEREST_RATE
FROM Table1 A
LEFT JOIN Table2 B ON A.ACCOUNT_NUM = B.ACCOUNT_NUM

如果你得到任何EFFECTIVE_DATE值作为2000-01-01,那意味着你必须整理出那些字符串值。

此外,您可以尝试以下查询以找出导致问题的行:

SELECT B.ACCOUNT_NUM, B.EFFECTIVE_DATE
FROM Table2 B
WHERE ISDATE(B.EFFECTIVE_DATE) = 0
于 2013-10-18T09:56:36.347 回答
0

我刚刚重新创建了您的架构并运行了您的查询,它运行良好。Table2.EFFECTIVE_DATE毫无疑问,问题是您的列中的字符串格式错误。

于 2013-10-18T09:54:07.147 回答