【发布时间】:2020-07-02 14:59:46
【问题描述】:
我正在编写一个函数来拆分逗号分隔的列,并在单个列中列出值并计算它们。
样本数据
CREATE TABLE stri
(name varchar(100))
INSERT INTO stri
VALUES ('a1, a2, a9, a8')
我会使用它来拆分值,但是我需要将它们放在一个列中。我正在考虑旋转,并将其复杂化,因为我希望结果按升序排序。
SELECT
REVERSE(PARSENAME(REPLACE(REVERSE(name), ',', '.'), 1)) AS name1
, REVERSE(PARSENAME(REPLACE(REVERSE(name), ',', '.'), 2)) AS name2
, REVERSE(PARSENAME(REPLACE(REVERSE(name), ',', '.'), 3)) AS name3
,REVERSE(PARSENAME(REPLACE(REVERSE(name), ',', '.'), 4)) AS name4
FROM dbo.stri;
GO
上面的查询显示
name1 name2 name3 name4
a1 a2 a9 a8
我期望的结果是:
name
a1
a2
a8
a9
4 -- count
感谢任何指南。
【问题讨论】:
-
逗号分隔的列对于数据库模式设计来说几乎是邪恶的。为自己省去一大堆麻烦,不要这样做。相反,添加一个包含两列的附加表:一列用于原始表中的主键,另一列用于逗号分隔列表中的单个值。然后,这个新表可以为原始表中的每一行包含几行。
-
谢谢。是的,这就是我想要做的。坚持用分隔值填充新表。
-
您仍在尝试处理 SQL 中的逗号分隔数据。处理此问题的最佳方法是在客户端语言中分离数据,在涉及任何 SQL 之前。
标签: sql sql-server function