SQL选择2个数字之间的Concat
我使用SQL Server 2012,需要在两个不同的列之间连接 例如: 当我使用Concat函数时,我只能够计算出第一个和最后一个数字。但是我也需要两者之间的数字。sql server中有。下面是一个不需要数字表的简单示例:SQL选择2个数字之间的Concat,sql,sql-server-2012,concatenation,concat,difference-between-rows,Sql,Sql Server 2012,Concatenation,Concat,Difference Between Rows,我使用SQL Server 2012,需要在两个不同的列之间连接 例如: 当我使用Concat函数时,我只能够计算出第一个和最后一个数字。但是我也需要两者之间的数字。sql server中有。下面是一个不需要数字表的简单示例: WITH Numbers AS ( SELECT TOP (2000) n = ROW_NUMBER() OVER (ORDER BY object_id) FROM sys.all_objects ORDER BY n ) SELECT n FROM
WITH Numbers AS
(
SELECT TOP (2000) n = ROW_NUMBER() OVER (ORDER BY object_id)
FROM sys.all_objects ORDER BY n
)
SELECT n FROM Numbers
WHERE n BETWEEN 3 AND 7
在sql server中有两种类型。下面是一个不需要数字表的简单示例:
WITH Numbers AS
(
SELECT TOP (2000) n = ROW_NUMBER() OVER (ORDER BY object_id)
FROM sys.all_objects ORDER BY n
)
SELECT n FROM Numbers
WHERE n BETWEEN 3 AND 7
下面是一个递归查询,它将以递归方式从头到尾执行,并生成所需的字符串或整数值:
下面是一个递归查询,它将以递归方式从头到尾执行,并生成所需的字符串或整数值:
尝试此查询。这里第一列=3,第二列=7
SELECT t.Id,
,STUFF((SELECT '' + CAST( n AS VARCHAR(50)) [text()]
FROM (SELECT DISTINCT n = number
FROM master..[spt_values]
WHERE number >= firstcolumn AND number <= secondcolumn
)a
FOR XML PATH(''), TYPE)
.value('.','NVARCHAR(MAX)'),1,0,'') List_Output
FROM tablename t
尝试此查询。这里第一列=3,第二列=7
SELECT t.Id,
,STUFF((SELECT '' + CAST( n AS VARCHAR(50)) [text()]
FROM (SELECT DISTINCT n = number
FROM master..[spt_values]
WHERE number >= firstcolumn AND number <= secondcolumn
)a
FOR XML PATH(''), TYPE)
.value('.','NVARCHAR(MAX)'),1,0,'') List_Output
FROM tablename t
这是伊兹克的风格
declare @values varchar(100)='', @from int, @to int
select @from=3, @to=7
;WITH
n0 AS (SELECT 0 AS number UNION ALL SELECT 0),
n1 AS (SELECT 0 AS number FROM n0 AS a CROSS JOIN n0 AS b),
n2 AS (SELECT 0 AS number FROM n1 AS a CROSS JOIN n1 AS b),
n3 AS (SELECT 0 AS number FROM n2 AS a CROSS JOIN n2 AS b)
select @values=@values+ltrim(sno) from
(select row_number() over (order by number) as sno from n3) as t
where sno between @from and @to
select @values as [values]
这是伊兹克的风格
declare @values varchar(100)='', @from int, @to int
select @from=3, @to=7
;WITH
n0 AS (SELECT 0 AS number UNION ALL SELECT 0),
n1 AS (SELECT 0 AS number FROM n0 AS a CROSS JOIN n0 AS b),
n2 AS (SELECT 0 AS number FROM n1 AS a CROSS JOIN n1 AS b),
n3 AS (SELECT 0 AS number FROM n2 AS a CROSS JOIN n2 AS b)
select @values=@values+ltrim(sno) from
(select row_number() over (order by number) as sno from n3) as t
where sno between @from and @to
select @values as [values]
使用子字符串函数尝试此操作:
以上查询仅适用于单个数字。下面是使用34、78之类的数字
SELECT *,
SUBSTRING('123456789', CONVERT(int, LEFT(numCol1,1)),
CONVERT(int, RIGHT(numCol2, 1)) - convert(int, LEFT(numCol1,1)) + 1) YourNumber
FROM @T
注意:数字列返回字符串,可以使用转换函数将其转换为整数
以上查询仅适用于单个数字。下面是使用34、78之类的数字
SELECT *,
SUBSTRING('123456789', CONVERT(int, LEFT(numCol1,1)),
CONVERT(int, RIGHT(numCol2, 1)) - convert(int, LEFT(numCol1,1)) + 1) YourNumber
FROM @T
注意:数字列返回字符串,可以使用转换函数将其转换为整数。谢谢您的回答。
我将使用@Mukesh Kalgude的答案。
因此,我的完整查询如下:
select
DayFrom,DayTo,
STUFF((SELECT TOP 7'' + CAST( n AS VARCHAR(50)) [text()]
FROM (SELECT DISTINCT n = number
FROM master..[spt_values]
WHERE number >= DayFrom AND DayTo <= 7
)a
FOR XML PATH(''), TYPE)
.value('.','NVARCHAR(MAX)'),1,0,'') List_Output
from SwitchProfilePairs
结果是
dayFrom=1 day To=1,但列表输出为1234567,谢谢您的回答。
我将使用@Mukesh Kalgude的答案。
因此,我的完整查询如下:
select
DayFrom,DayTo,
STUFF((SELECT TOP 7'' + CAST( n AS VARCHAR(50)) [text()]
FROM (SELECT DISTINCT n = number
FROM master..[spt_values]
WHERE number >= DayFrom AND DayTo <= 7
)a
FOR XML PATH(''), TYPE)
.value('.','NVARCHAR(MAX)'),1,0,'') List_Output
from SwitchProfilePairs
结果是
dayFrom=1 day To=1但是列表输出是1234567是的,我错过了他想要将数字连接到单个varchar的部分。有点晚了,但是有一种简单的方法可以使用子字符串函数完成。是的,我错过了他想要将数字连接到单个varchar的部分。有点晚了,但有一种简单的方法可以使用子字符串函数来实现。