我在Wonderware(工业HMI)Historian应用程序中使用MS SQL Server进行以下查询。以'ww'开头的关键字是特定于Wonderware的,wwResolution每24小时获得一次结果:
SET QUOTED_IDENTIFIER OFF
SELECT * FROM OPENQUERY(INSQL,
"SELECT DateTime = convert(nvarchar, DateTime, 101) + ' 23:59:59.000',
[BarRoom_GASMETER.ACC], [DELAQ_GASMETER.ACC]
FROM WideHistory
WHERE wwRetrievalMode = 'Cyclic'
AND wwResolution = 86400000
AND wwVersion = 'Latest'
AND DateTime >= DateAdd(wk,-1,GetDate())
AND DateTime <= GetDate()")'
我想尝试格式化查询,所以我这样做:
format([BarRoom_GASMETER.ACC],'###,###,###,###,###.##') as 'Bar Room'
但是我发现'错误'。关于在这种情况下我应该如何使用格式的任何建议?提前谢谢你的答案。 添加了快照,您必须在本地保存它才能读取它:
我认为这与“引用标识符”的处理方式有关。
答案 0 :(得分:2)
我找到了解决方案。它并不优雅,但它适用于Server 2008和Wonderware Historinan。它将在上个月的午夜返回数据,格式化为2位小数。
SET QUOTED_IDENTIFIER OFF
SELECT datetime , [BarRoom_GASMETER.ACC] = convert(decimal(38,2),
[BarRoom_GASMETER.ACC])
FROM OPENQUERY(INSQL, "SELECT Datetime , [BarRoom_GASMETER.ACC],
FROM WideHistory
WHERE [SysTimeHour] = 23
AND [SysTimeMin] = 59
AND wwRetrievalMode = 'Cyclic'
AND wwResolution = 60000
AND wwVersion = 'Latest'
AND DateTime >= DateAdd(mm,-1,GetDate())
AND DateTime <= getdate()
")
感谢@KHeaney和@srutzky
答案 1 :(得分:0)
您的格式不应该需要所有额外的#
符号。尝试使用此
format([BarRoom_GASMETER.ACC],'#,###.##') as 'Bar Room'
修改
对于您的其他问题,我发现此论坛帖子:http://www.plctalk.net/qanda/showthread.php?t=52677您的问题似乎可能是由于达到了128个字符的限制。这可能不再是这种情况,因为这个帖子超过一年了。
如果是这种情况,其中一张海报提到要克服此限制,您需要在查询中交换单引号和双引号。这意味着您的新查询应如下所示:
SELECT * FROM OPENQUERY(INSQL,
'SELECT DateTime = convert(nvarchar, DateTime, 101) + " 23:59:59.000",
format([BarRoom_GASMETER.ACC],"#,###.##") as "Bar Room",
[DELAQ_GASMETER.ACC]
FROM WideHistory
WHERE wwRetrievalMode = "Cyclic"
AND wwResolution = 86400000
AND wwVersion = "Latest"
AND DateTime >= DateAdd(wk,-1,GetDate())
AND DateTime <= GetDate()'
)
同时删除了示例中的最后一个单引号,因为我没有看到它关闭的内容。
答案 2 :(得分:0)
问题似乎是FORMAT函数在SQL Server 2012中出现,而您在SQL Server 2008上没有它。
虽然,如果我通过OPENQUERY提交一个查询,指定一个不存在的函数,我得到:
Msg 195,Level 15,State 10,Line 1 'bob'不是公认的内置函数名称。
但是我在运行以下内容时也没有问题(在SQL Server 2012上):
SET QUOTED_IDENTIFIER OFF;
SELECT *
FROM OPENQUERY([LOCAL],
"SELECT *, FORMAT(object_id,'#,#.#') FROM master.sys.objects;");