在sql-server中,同一个表中有三列,我想从Column_A和Column_B创建Column_C 我想进入sql中的同一个表
Column_A Column_B Column_C
1,2,3,4 2,3
1,2,3 1
Column_A Column_B Column_C
1,2,3,4 2,3 1,4
1,2,3 1 2,3
答案 0 :(得分:1)
如果您使用Postgres,则可以安装intarray扩展名,然后解决方案就像:
select column_a,
column_b,
array_to_string(
string_to_array(column_a,',')::int[] - string_to_array(column_b,',')::int[]
, ',') as column_c
from badly_designed_table
尽管设计很糟糕。
string_to_array(column_a,',')::int[]
将字符串转换为数组。
intarray扩展提供了-
运算符,用于从第一个数组中删除第二个数组中包含的元素。
array_to_string()
然后将数组转换回字符串。
答案 1 :(得分:0)
我很不确定实际的桌子是什么样的,或者是那个问题的专栏...但是我现在会给你一般的回复,如果你需要别的东西,你可以告诉我:
SELECT (ColumnA - ColumnB) AS Column C
FROM tablename
但由于你的桌子没有标准化,这非常令人困惑。同样,你不应该在表中存储用逗号分隔的多个值,因为你可以这样做,但它会使SQL开发变得更加困难。
答案 2 :(得分:0)
这应该这样做。它使用空字符串替换Column_A中存在的Column_B的字符串。它还涉及潜在的双重逗号和前导/尾随逗号
SELECT Column_A,
Column_B,
LTRIM(
RTRIM(
REPLACE(
REPLACE(Column_A,
Column_B,
''),
',,',
','),
','),
',') AS Column_C
FROM Table1
这对Oracle SQL来说是正确的。如果您使用的是其他DBMS,我认为您只需要使用相应的TRIM语法。