例如:表A 字段如下 Name DataUploadDate Value
SELECT Name,SUM(Value) FROM A
WHERE (Name = '测试一' AND DataUploadDate >= '2017-04-01' AND DataUploadDate <= '2017-04-30') OR (Name = '测试二' AND DataUploadDate >= '2017-03-01' AND DataUploadDate <= '2017-03-31') .......
9 个解决方案
#1
分几次查,然后查询结果在程序里再合并
话说你这个sql拼接是多长啊,都达到了sql字数限制
话说你这个sql拼接是多长啊,都达到了sql字数限制
#2
多个 时间取交集,生成一个时间
#3
#4
想写一个sql语句,很长,主要是in后跟着无数个用户ID,(虽然实现方式很低级,但是还是凑合着用吧)
不知道sql最大长度是多少,看了 SQL Server 的最大容量规范,写的是
包含 SQL 语句的字符串的长度(批大小)的最大大小/数量:65,536 * 网络数据包大小
网络数据包大小是啥东东?你就不能明说最大长度吗是几吗? 微软,你就欺负我不懂TCP吧!
好吧,你不说,我自己测试。
写了一个字符串函数,形成 N个Guid字符串(相当于N*32长度),
然后用select * from table where id in (字符) 执行
1万个Guid字符串,在查询分析器通过,OK,看来支持32万长度(320K)
再加个数量级到10万个,也OK!支持3.2M长度
在加个数量级到100万个,也OK!!支持32M长度,不过太慢了,sql执行了5分钟才返回结果
在加个数量级到1000万个,也OK!!!支持320M长度,用了1小时3分钟才返回结果
没有时间,也没有必要做进一步测试了,
反正如果sql采用In('guid','guid','guid')结构,则至少支持长度guid的个数为1000万个,总字符长度为3.2亿,320M
结论是你就放心用吧,你这一辈子恐怕是遇不到超出32000万字节长度的sql语句了!
引用别人的一下。。。。。
不知道sql最大长度是多少,看了 SQL Server 的最大容量规范,写的是
包含 SQL 语句的字符串的长度(批大小)的最大大小/数量:65,536 * 网络数据包大小
网络数据包大小是啥东东?你就不能明说最大长度吗是几吗? 微软,你就欺负我不懂TCP吧!
好吧,你不说,我自己测试。
写了一个字符串函数,形成 N个Guid字符串(相当于N*32长度),
然后用select * from table where id in (字符) 执行
1万个Guid字符串,在查询分析器通过,OK,看来支持32万长度(320K)
再加个数量级到10万个,也OK!支持3.2M长度
在加个数量级到100万个,也OK!!支持32M长度,不过太慢了,sql执行了5分钟才返回结果
在加个数量级到1000万个,也OK!!!支持320M长度,用了1小时3分钟才返回结果
没有时间,也没有必要做进一步测试了,
反正如果sql采用In('guid','guid','guid')结构,则至少支持长度guid的个数为1000万个,总字符长度为3.2亿,320M
结论是你就放心用吧,你这一辈子恐怕是遇不到超出32000万字节长度的sql语句了!
引用别人的一下。。。。。
#5
试试这个,看看能不能超了
SELECT Name,SUM(Value) FROM A
WHERE (Name = '测试一' AND CONVERT( VARCHAR(7), DataUploadDate, 120 ) = '2017-04') OR (Name = '测试二' AND CONVERT( VARCHAR(7), DataUploadDate, 120 ) = '2017-03' ) ....................
SELECT Name,SUM(Value) FROM A
WHERE (Name = '测试一' AND CONVERT( VARCHAR(7), DataUploadDate, 120 ) = '2017-04') OR (Name = '测试二' AND CONVERT( VARCHAR(7), DataUploadDate, 120 ) = '2017-03' ) ....................
#6
用view能解决么?
#7
如果你这个条件是无法估计的,那只能分开查询,最后合在一起,
可以在代码里写,也可以创建存储过程,在数据库层面写
可以在代码里写,也可以创建存储过程,在数据库层面写
#8
我这个主要是条件太长了,视图解决不了。
#9
我试试分次查询吧。谢谢大家了,散分结贴了。
#1
分几次查,然后查询结果在程序里再合并
话说你这个sql拼接是多长啊,都达到了sql字数限制
话说你这个sql拼接是多长啊,都达到了sql字数限制
#2
多个 时间取交集,生成一个时间
#3
#4
想写一个sql语句,很长,主要是in后跟着无数个用户ID,(虽然实现方式很低级,但是还是凑合着用吧)
不知道sql最大长度是多少,看了 SQL Server 的最大容量规范,写的是
包含 SQL 语句的字符串的长度(批大小)的最大大小/数量:65,536 * 网络数据包大小
网络数据包大小是啥东东?你就不能明说最大长度吗是几吗? 微软,你就欺负我不懂TCP吧!
好吧,你不说,我自己测试。
写了一个字符串函数,形成 N个Guid字符串(相当于N*32长度),
然后用select * from table where id in (字符) 执行
1万个Guid字符串,在查询分析器通过,OK,看来支持32万长度(320K)
再加个数量级到10万个,也OK!支持3.2M长度
在加个数量级到100万个,也OK!!支持32M长度,不过太慢了,sql执行了5分钟才返回结果
在加个数量级到1000万个,也OK!!!支持320M长度,用了1小时3分钟才返回结果
没有时间,也没有必要做进一步测试了,
反正如果sql采用In('guid','guid','guid')结构,则至少支持长度guid的个数为1000万个,总字符长度为3.2亿,320M
结论是你就放心用吧,你这一辈子恐怕是遇不到超出32000万字节长度的sql语句了!
引用别人的一下。。。。。
不知道sql最大长度是多少,看了 SQL Server 的最大容量规范,写的是
包含 SQL 语句的字符串的长度(批大小)的最大大小/数量:65,536 * 网络数据包大小
网络数据包大小是啥东东?你就不能明说最大长度吗是几吗? 微软,你就欺负我不懂TCP吧!
好吧,你不说,我自己测试。
写了一个字符串函数,形成 N个Guid字符串(相当于N*32长度),
然后用select * from table where id in (字符) 执行
1万个Guid字符串,在查询分析器通过,OK,看来支持32万长度(320K)
再加个数量级到10万个,也OK!支持3.2M长度
在加个数量级到100万个,也OK!!支持32M长度,不过太慢了,sql执行了5分钟才返回结果
在加个数量级到1000万个,也OK!!!支持320M长度,用了1小时3分钟才返回结果
没有时间,也没有必要做进一步测试了,
反正如果sql采用In('guid','guid','guid')结构,则至少支持长度guid的个数为1000万个,总字符长度为3.2亿,320M
结论是你就放心用吧,你这一辈子恐怕是遇不到超出32000万字节长度的sql语句了!
引用别人的一下。。。。。
#5
试试这个,看看能不能超了
SELECT Name,SUM(Value) FROM A
WHERE (Name = '测试一' AND CONVERT( VARCHAR(7), DataUploadDate, 120 ) = '2017-04') OR (Name = '测试二' AND CONVERT( VARCHAR(7), DataUploadDate, 120 ) = '2017-03' ) ....................
SELECT Name,SUM(Value) FROM A
WHERE (Name = '测试一' AND CONVERT( VARCHAR(7), DataUploadDate, 120 ) = '2017-04') OR (Name = '测试二' AND CONVERT( VARCHAR(7), DataUploadDate, 120 ) = '2017-03' ) ....................
#6
用view能解决么?
#7
如果你这个条件是无法估计的,那只能分开查询,最后合在一起,
可以在代码里写,也可以创建存储过程,在数据库层面写
可以在代码里写,也可以创建存储过程,在数据库层面写
#8
我这个主要是条件太长了,视图解决不了。
#9
我试试分次查询吧。谢谢大家了,散分结贴了。