我有一个包含grade_range列的数据库表,该列的行包含用逗号分隔的重复值(类似于列表)。
grade_range
"Pre-K, Pre-K, Pre-K"
"Pre-K, K-9, K-9"
"Pre-K, K-7, 9-12"
"Pre-K, K-7, K-7"
"Pre-K, K-6"
"Pre-K, K-5"我想要更新这些记录,以便在此列的行中只剩下唯一的值,如下所示
grade_range
"Pre-K"
"Pre-K, K-9"
"Pre-K, K-7, 9-12"
"Pre-K, K-7"
"Pre-K, K-6"
"Pre-K, K-5"可以使用以下命令在SQL中轻松选择不同的列值
SELECT DISTINCT grade_range FROM dev.school但是,我不确定如何在行单元格中选择/更新不同的值。我想到的一种方法是在Excel中操作这些数据,然后使用基于相同sid的UPDATE语句更新记录。
对于在SQL中实现这一点有什么建议吗?
发布于 2017-07-21 07:53:07
使用此函数可将逗号分隔值转换为行,然后使用distince,然后再次将它们连接起来
ALTER FUNCTION [dbo].[Split]
(
@List varchar(max),
@SplitOn nvarchar(5)
)
RETURNS @RtnValue table
(
ID int identity(1,1),
Val varchar(max)
)
AS
BEGIN
While (Charindex(@SplitOn,@List)>0)
Begin
Insert Into @RtnValue (Val)
Select
Val = ltrim(rtrim(Substring(@List,1,Charindex(@SplitOn,@List)-1)))
Set @List = Substring(@List,Charindex(@SplitOn,@List)+len(@SplitOn),len(@List))
End
Insert Into @RtnValue (Val)
Select Value = ltrim(rtrim(@List))
Return
END发布于 2017-07-21 12:14:16
优先。创建一个函数来区分数组
打开psql。在psql中输入\ef。将内容替换为以下函数:
CREATE OR REPLACE FUNCTION public.array_unique(arr anyarray)
RETURNS anyarray
LANGUAGE sql AS
$function$
select array( select distinct unnest($1) )
$function$。玩游戏
假设每个元素不断地被逗号和空格分割。我们可以将每行拆分成数组格式,将其与先前的函数区分开来,然后将其转换回字符串。
SELECT
array_to_string(array_unique(regexp_split_to_array(grade, E', ')), ',') as grade_distinct,
grade
FROM
your_table;结果
localhost:5432 user@database=#
SELECT
array_to_string(array_unique(regexp_split_to_array(grade, E', ')), ',') as grade_distinct,
grade
FROM
tmp_stack_overflow;
grade_distinct | grade
----------------+---------------------
Pre-K | Pre-K, Pre-K, Pre-K
Pre-K,K-9 | Pre-K, K-9, K-9
Pre-K,K-7,9-12 | Pre-K, K-7, 9-12
Pre-K,K-7 | Pre-K, K-7, K-7
K-6,Pre-K | Pre-K, K-6
K-5,Pre-K | Pre-K, K-5
(6 rows)https://stackoverflow.com/questions/45226862
复制相似问题