2012-10-26 46 views
2

我试图从Microsoft SQL Server 2000的存储过程移动到Informix 11独创的SP包含了一组最终选择逐语句包括转换日期时间:MS SQL到Informix 11 - 集团通过转换日期时间

group by convert(varchar(8), c.startDateTime, 1) 

当我将它转换为Informix的语法我在运行时出现语法错误:

GROUP BY (c.startDateTime::DATETIME YEAR TO DAY)::VARCHAR(10) 

任何人都可以请点我怎么样,如果可能的话,这可以在Informix中做了什么?如果这是不可能的,我怀疑,你将如何在整个查询中处理这个问题?

+0

有什么语法错误?某些DBMS不允许使用GROUP BY函数()或其他任何其他的只能使用“GROUP BY”列。测试,如果这导致了错误,请将查询和函数包装到子查询中,然后在外部进行分组。 –

+0

我使用的服务器工作室8.5调试和我得到的错误仅仅是“语法错误”。这是整个查询的一部分大约150行,并且Group By中有许多其他字段,但这是唯一一个引发错误的字段。不确定这是否有帮助,但是很难包装查询并对结果进行分组。 – Aossey

+0

查看我的其他建议/答案。 –

回答

2

我认为你需要从这个转换:

SELECT a, b, c 

FROM ... 

GROUP BY (c.startDateTime::DATETIME YEAR TO DAY)::VARCHAR(10) ; 

喜欢的东西:

SELECT a, b, c, 
    (c.startDateTime::DATETIME YEAR TO DAY)::VARCHAR(10) AS d 

FROM ... 

GROUP BY 4 ;  --- meaning: the 4th column in the SELECT clause 
+0

这也是我推荐的。顺序位置语法'GROUP BY 1,2 ..'可以让你远离任何东西。 – RET

0

你转换到Informix语法日期在MM/DD/YYYY VARCHAR(MSSQL风格= 1)as

TO_CHAR(c.StartDateTime,"%m/%d/%iY") 

???

+0

谢谢您的信息。这很有帮助。 – Aossey

1

在Informix中,一般不需要日期时间字段转换为字符串操纵它们。相反,使用扩展功能。

实施例中,如果c.StartDateTime被定义为一个日期时间年到第二例如2012年10月28日23点00分00秒,你只想要日期部分,使用扩展(c.StartDateTime,今年天)。这将返回2012-10-28。