Sql 表值函数,选择多行
我有一个表值函数,它通过一个公共分隔符将字符串拆分,并将其输出到具有以下结构的表中:Sql 表值函数,选择多行,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我有一个表值函数,它通过一个公共分隔符将字符串拆分,并将其输出到具有以下结构的表中: @ValueLookup TABLE ( Value nvarchar(100), ValueIndex int ) 我主要使用它来分割组合ID值,例如1234-5678: dbo.SplitString('1234-5678', '-') 目前,我正在使用两个SELECT,在拆分两个值后获取它们,并将它们转换为整数: DECLARE @FirstID INT DECLARE @Secon
@ValueLookup TABLE
(
Value nvarchar(100),
ValueIndex int
)
我主要使用它来分割组合ID值,例如1234-5678
:
dbo.SplitString('1234-5678', '-')
目前,我正在使用两个SELECT
,在拆分两个值后获取它们,并将它们转换为整数:
DECLARE @FirstID INT
DECLARE @SecondID INT
SELECT
@FirstID = CONVERT(INT, Value)
FROM dbo.SplitString('1234-5678', '-')
WHERE ValueIndex = 1
SELECT
@SecondID = CONVERT(INT, Value)
FROM dbo.SplitString('1234-5678', '-')
WHERE ValueIndex = 2
是否有一种方法可以获取这两个值并在一个SELECT
语句中分配它们
declare @FirstId int, @SecondId int;
select
@FirstID = convert(int,min(case when ValueIndex = 1 then Value end))
, @SecondID = convert(int,min(case when ValueIndex = 2 then Value end))
from dbo.SplitString('1234-5678', '-')
select
FirstId = @FirstId
, SecondId = @SecondId
rextester演示:
返回:
+---------+----------+
| FirstId | SecondId |
+---------+----------+
| 1234 | 5678 |
+---------+----------+
演示使用Jeff Moden的CSV拆分器表值函数完成,函数名和输出列重命名
拆分字符串引用:
Declare @String varchar(max) = '1234-5678'
Declare @FirstID INT
Declare @SecondID INT
Select @FirstID = xDim.value('/x[1]','int')
,@SecondID = xDim.value('/x[2]','int')
From (Select Cast('<x>' + replace(@String,'-','</x><x>')+'</x>' as xml) as xDim) as A
Declare@String varchar(max)='1234-5678'
声明@FirstID INT
声明@SecondID INT
选择@FirstID=xDim.value('/x[1]',int')
,@SecondID=xDim.value('/x[2]','int')
从(选择Cast(“”+replace(@String,'-',“”)+''作为xml)作为xDim)作为
非常好,正是我想要的。我不知道您可以在CASE
语句中引用另一行值。因为我还有几分钟的时间可以接受,所以我对MIN
的用法很好奇?这只是转换的良好实践吗?@X3074861X选择min()
是任意的。您也可以使用max()
。如果在聚合函数内部而不是外部转换为int
,也可以使用sum()
。