2015-12-15 511 views
-1

我试图使用SELECT INTOUNION ALL将3个表连接在一起。使用UNION ALL时出现'转换失败...',但单独运行查询时可以使用

表1使用了一些Ltrim(Rtrim())CONVERT命令,而与其他两个表,我只是把他们的列出来,并粘贴到这个组合表。

当我尝试运行查询,我得到一个错误消息说:

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

但是单独处理表格,一切都很顺利。

这是什么原因,我该如何解决?

编辑:这是前两个表的联合的示例;

SELECT 
    , CONVERT(DATE, [GL DATE], 101) AS [Date1] 
    , CONVERT(FLOAT, [Amount_01]) AS [Amt] 
INTO #big_table 
FROM table1  
UNION ALL 

    [POSDATE] AS [Date1] 
    , [NET] AS [Amt] NULL AS [Date_Up] 
    , NULL AS [Time_up] 
    , 
FROM table2 

编辑#2:

我已经找到了麻烦列,它们是 [日期1]和[金额。

对于表1,这里是从这两列的示例数据:

Date1   Amt 
4/28/2014  216.43 
4/28/2014  1526.61 
4/28/2014  13.61 
4/27/2014  177.9 
4/27/2014  489.58 

对于表2:

Date1   Amt 
30/04/2014  -7501.9 
30/04/2014  0 
30/03/2014  -75201.9 
30/03/2014  0 
28/02/2014  -25247.93 
28/02/2014  0 

对于表3:

Date1   Amt 
21/04/2014  100,000,000.00 
21/04/2014  -2,312,314.44 
21/04/2014  -100,000,000.00 
21/04/2014  56.41 
26/04/2014  2,312,314.44 
26/04/2014  -125.4 

如果我没有错误,表2和表3中的Date1的格式与表1相比存在问题,因为2和3是:DD/MM/YYYY,而表1是MM/DD/YYYY

但为什么不是Amt能正常工作?可以将非正数转换为浮点数吗?

我该如何解决此问题并进行有效的转换?

编辑3:对于表3:

我尝试使用 CONVERT(DATE,[日期1],103)和它的工作, 但尽管具有相同的输入端,同样的策略失败对于表2 /输出结构 - 这可能是什么原因?

我再次收到:从字符串转换日期和/或时间时

转换失败。

+0

查找那些从字符串转换为datetime的列,它可能与列中日期值的格式有关。 – Harsh

+0

但是,当单独运行查询时,它工作正常。这不是很奇怪吗?或者,在两个表上使用'UNION ALL'有一个问题,一个行条目从字符串转换为日期/时间,另一个保留为字符串,但属于同一列? – elbarto

+1

例如,如果您正在对齐“DATETIME”类型的列和“VARCHAR”类型的列,那么它会尝试自动将“DATETIME”列转换为“VARCHAR”,并且在您的情况下会失败。删除语句中的列,直到找到违规列对,找到问题的数据然后回传,我们可以进一步提供帮助 –

回答

2

SELECT INTO将创建一个表,并在这样做时将假设您在创建表时使用的数据类型(如果已将转换应用于某些列)。查看两个现有表格并记下日期/时间/字符串字段应非常简单,并确保与这些列匹配的UNION列的输入是正确的。因此,例如,如果其他两个表中的第1列都是字符串,并且SELECT INTO表中的第1列是日期/时间,则可以使用SELECT convert(varchar,Col1) AS yourColName,以便它将与字符串类型另外两张桌子。

如果您发布了查询代码和表定义,这将有所帮助。

+0

谢谢,我明白了。我已经添加了一些示例代码。什么是解决这个问题的最佳方法,如果不惜一切代价我需要保留表1正在处理的方式? 我是否需要将相同的转换应用于其他表的相关行条目? – elbarto

+1

最好的解决方法是通过create table创建表格。 – shawnt00

+0

它是怎么回事?你的工作是否正确?祝你好运,我的朋友! –