我有一个名为" format"的列,其中包含由逗号,
分隔的字符串的行。
类似的东西:
-query:
SELECT DISTINCT
[format]
FROM
[mydb].[dbo].[Demand_conditions]
-result:
format <- column's name
,one,two,three, <- row 1
,paper,cardboard,metal, <- row 2
我从一个获取昏迷之间值的函数中选择所有,如:
SELECT * FROM [mydb].[dbo].splitstring(
(SELECT DISTINCT
[format]
FROM
[mydb].[dbo].[Demand_conditions]))
这给了我以下结果:
更新:显示的栏目名称是&#34;名称&#34;我想只是管理工作室说:&#34;你的专栏没有名字&#34;。我希望(正如我在下一个例子中所示),要调用的字符串&#34;格式&#34;。我不想在第一行中获得价值。
Name <- No column name
one
two
three
paper
cardboard
metal
我需要为上面结果的列命名:
format <- Column name
one
two
three
paper
cardboard
metal
splitstring
函数的代码:
CREATE FUNCTION [dbo].[splitstring] ( @stringToSplit VARCHAR(MAX) )
RETURNS
@returnList TABLE ([Name] [nvarchar] (500))
AS
BEGIN
DECLARE @name NVARCHAR(255)
DECLARE @pos INT
WHILE CHARINDEX(',', @stringToSplit) > 0
BEGIN
SELECT @pos = CHARINDEX(',', @stringToSplit)
SELECT @name = SUBSTRING(@stringToSplit, 1, @pos-1)
INSERT INTO @returnList
SELECT @name
SELECT @stringToSplit = SUBSTRING(@stringToSplit, @pos+1, LEN(@stringToSplit)-@pos)
END
INSERT INTO @returnList
SELECT @stringToSplit
RETURN
END
答案 0 :(得分:4)
您的语法可能在语法上无效,因为我怀疑拆分字符串函数将表作为参数。拆分字符串函数通常只需要字符串。适当的方法是apply
。
您可以在表别名中指定列名。我会这样做:
SELECT distinct s.format
FROM [mydb].[dbo].[Demand_conditions] dc CROSS APPLY
([mydb].[dbo].splitstring(dc.[format])
) s(format);
s(format)
命名splitstring()
函数返回的列。
答案 1 :(得分:1)
这对我有用:
SELECT f.[format] from (
SELECT * FROM [mydb].[dbo].splitstring(
(SELECT DISTINCT
[format]
FROM
[mydb].[dbo].[Demand_conditions])) ) f([format])
答案 2 :(得分:0)
这应该有用。
SELECT * FROM [mydb].[dbo].splitstring(
(
SELECT 'format'
UNION
SELECT DISTINCT
[format]
FROM
[mydb].[dbo].[Demand_conditions]))