SQL生成2个已知整数之间的有效值范围
我需要编写一个 SQL 查询,该查询将在给定范围的开始和结束的情况下生成有效整数列表。
即给出下表:-
CMPY------MIN_YEAR------MAX_YEAR
PS--------2007----------2014
我想编写一个查询,它将返回所有有效值(针对 CMPY)即:-
CMPY YEAR
PS 2007
PS 2008
PS 2009
PS 2010
PS 2011
PS 2012
PS 2013
PS 2014
这需要在 Oracle 和 SQL Server 上工作。
I need to write a SQL query that will generate a list of valid integers given the start and end to the range.
ie given the below table :-
CMPY------MIN_YEAR------MAX_YEAR
PS--------2007----------2014
I'd like to write a query which would return all valid values (against CMPY) ie :-
CMPY YEAR
PS 2007
PS 2008
PS 2009
PS 2010
PS 2011
PS 2012
PS 2013
PS 2014
This needs to work on both Oracle and SQL Server.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
对于便携式解决方案,您可能需要创建一个简单的数字表,如下所示:
然后用您可能需要的尽可能多的行填充它。那么你的查询是:
For a portable solution you may want to create a simple table of numbers like this:
then populate it with as many rows as you may ever need. Then your query is:
Oracle无表的解决方案(SQL Server可以使用表方式):
eg:
Solution for Oracle without any table (You can use the table way for SQL Server):
e.g:
最有效的方法是拥有一个 Numbers(int num) 表,您可以查询该表来获取一系列数字,例如:
The most efficient way to do this is to have a Numbers(int num) table that you can query to get a range of numbers, e.g.:
查看您的数据,数字是年。您可以在两台服务器中创建一个包含所有年份的表,然后对其进行联接:
这可以在 Oracle 和 SQL Server 上为中间的每一年有效地创建一行。
Looking at your data, the numbers are years. You could create a table in both servers that contains all years, and then join on it:
This effectively creates a row for each year in between, on both Oracle and SQL Server.