在不使用concat函数的情况下从SQL中的单个数字列连接数字

时间:2015-12-27 11:28:38

标签: sql sql-server tsql

对于具有0到9之间值的单个列表,我有以下代码:

create table number(
    value int
)

truncate table number

insert into number values(0);
insert into number values(1);
insert into number values(2);
insert into number values(3);
insert into number values(4);
insert into number values(5);
insert into number values(6);
insert into number values(7);
insert into number values(8);
insert into number values(9);

我想要的是一个查询,它应该在不使用concat(或任何内置函数)函数的情况下连接数字,并以表格形式给出以下输出:

0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
.
.
.
.
.
999

过去5天真的很难做到这一点。需要真诚的帮助。

2 个答案:

答案 0 :(得分:4)

您可以使用CROSS JOIN和简单的数学公式:

SELECT [num] = n1.value * 100 + n2.value * 10 + n3.value 
FROM number n1, number n2, number n3
ORDER BY num

LiveDemo

输出:

╔═════╗
║ num ║
╠═════╣
║ 0   ║
║ 1   ║
║ 2   ║
║ 3   ║
║ 4   ║
║ 5   ║
║ 6   ║
║ 7   ║
║ ... ║
║ 999 ║
╚═════╝

修改

交叉联接将返回记录(元组)(0,0,0), (0,0,1),(0,0,2), ...,(9,9,9),然后您需要应用Positional Number System formula

enter image description here

示例:

enter image description here

来自https://en.wikipedia.org/wiki/Positional_notation

图片

╔════════════╦═══════════╦══════════╦════════════════════╗
║ 10^2 = 100 ║ 10^1 = 10 ║ 10^0 = 1 ║        num         ║
╠════════════╬═══════════╬══════════╬════════════════════╣
║ 0 * 100    ║ 0 * 10    ║ 0 * 1    ║ 0 + 0 + 0 = 0      ║
║ 0 * 100    ║ 0 * 10    ║ 1 * 1    ║ 0 + 0 + 1 = 1      ║
║ 0 * 100    ║ 0 * 10    ║ 2 * 1    ║ 0 + 0 + 2 = 2      ║
║ ...        ║ ...       ║ ...      ║ ...                ║
║ 9 * 100    ║ 9 * 10    ║ 9 * 1    ║ 900 + 90 + 9 = 999 ║
╚════════════╩═══════════╩══════════╩════════════════════╝

答案 1 :(得分:0)

虽然@ lad2025查询基于某个公式是好的。它使用3个交叉连接。

更简单的方法(不确定,如果这是最好的)

$fields = array();
 $values = array();
 foreach($_POST as $key => $value){
      array_push($fields, $key);
      array_push($values, $value);
 }

$sql = "INSERT INTO table (".implode(", ", $fields).") VALUES (".implode(", ", $values).")"

mysql_query($sql);