我想将字符串拆分到一个新表中,该表可用于连接到原始表。请参阅代码以了解如何将数据存储在列中。 我
@Id
@GeneratedValue(generator = "uuid")
@GenericGenerator(name = "uuid", strategy = "uuid2")
private String id;
我非常希望将其分为三列:ID,标签,值,如下所示:
connect = ActiveRecord::Base.establish_connection(
:adapter => 'mysql2',
:host => "localhost",
:database => 'local_db'
)
sql_query = "your_query"
query_result = connect.connection.execute(sql_query)
query_result.to_a
最好使用无XML技巧的游标,无变量的方式执行此操作。我想出了这一点(我不知道如何为每条记录添加ID)。
CREATE TABLE #tmpsplit
(
id INT IDENTITY(1,1)
, StringToSplit varchar(100)
)
INSERT INTO #tmpsplit VALUES ('Lable1:Value1|Lable2:Value2')
INSERT INTO #tmpsplit VALUES ('Lable1:ValueOne|Lable2:ValueTwo|Lable3:ValueThree')
谢谢。
答案 0 :(得分:2)
只需在您的子查询中包含id字段
SELECT
id
,SUBSTRING(t2.value,1,CHARINDEX(':',t2.value)-1) AS Lable
,SUBSTRING(t2.value,CHARINDEX(':',t2.value)+1,LEN(t2.value)) AS Value
FROM
(SELECT id, Cast ('<x>' + Replace(StringToSplit, '|', '</x><x>') + '</x>' AS XML) AS
RawData FROM #tmpsplit) t1
CROSS APPLY
(SELECT y.value('.','varchar(100)') as value FROM RawData.nodes('x') as f(y)) t2
答案 1 :(得分:0)
您可以使用STRING_SPLIT函数。此功能在SQL 2016及更高版本中可用。如果版本较小,则可以创建表值拆分功能,并在下面的查询中使用该功能。希望对您有帮助。
SELECT
t.id
,SUBSTRING(t2.value,1,CHARINDEX(':',t2.value)-1) AS Lable
, SUBSTRING(t2.value,CHARINDEX(':',t2.value)+1,LEN(t2.value)) AS Value
FROM #tmpsplit T
CROSS APPLY (SELECT value FROM STRING_SPLIT(T.StringToSplit, '|'))T2