集合函数列表

时间:2011-05-31 13:14:59

标签: mysql sql-server oracle sybase aggregate-functions

有没有办法使用jdbc元数据或运行任何dbms特定查询来获取dbms支持的聚合函数列表?

3 个答案:

答案 0 :(得分:1)

在SQL Server上,您可以查询安装目录中的XML:

DECLARE @xml XML
SELECT @xml = x.y
FROM OPENROWSET( BULK 'C:\Program Files (x86)\Microsoft SQL Server\100\Tools\Binn\VSShell\Common7\IDE\SqlToolsData\1033\SQLCommonObjects.xml', SINGLE_BLOB ) x(y)

;WITH XMLNAMESPACES( 'http://tempuri.org/SqlCommonObjects.xsd' AS ns )
SELECT
Category.Name.value('ns:DisplayName[1]', 'VARCHAR(MAX)') [Category],
[Function].Name.value('ns:Name[1]', 'VARCHAR(MAX)') [Function],
[Function].Name.query('for $p in ns:Parameters/ns:Parameter return
concat($p/ns:Name[1],",")').value('.', 'VARCHAR(MAX)') Parameters

FROM @xml.nodes('//ns:Category[ns:DisplayName="Aggregate Functions"]')
AS Category(Name)
CROSS APPLY Category.Name.nodes('ns:Objects/ns:Function') [Function](Name)

在BULK声明之后你应该给你的文件夹(区别主要是Program Files“和”Program_Files(x86)“和SQL server版本(100是2008年的例子)

答案 1 :(得分:0)

您的帖子有多个数据库标记,每个标记都有系统目录和/或信息模式,可以让您知道过程列表。查询的哪个表/视图将不同于数据库引擎,但是...(例如,在Postgres中,您将加入pg_proc和pg_aggregate,因为information_schema.routines不会告诉您哪些转换是聚合。)< / p>

通常可以安全地假设所有数据库实现中都存在典型的聚合函数(sum()count()avg() ...)。

我唯一知道的例外是Postgres,由于ambiguity in the syntax而不支持any() / some()

SELECT b1 = ANY((SELECT b2 FROM t2 ...)) FROM t1 ...;

答案 2 :(得分:0)

没有什么是全面的,因为它不是JDBC规范的一部分。如果您不知道在运行时使用的数据库引擎,最好的办法是向数据库提交测试查询,并在使用可能不支持的任何聚合函数之前检查它是否失败。