我有一个很大的字符串值,我希望将其放入数据库中。我有当前的代码来做到这一点。
DECLARE @Value NVARCHAR(max) = {status}
DECLARE @DYVALUE TABLE (VALUE NVARCHAR(MAX))
INSERT INTO @DYVALUE (value)
SELECT @VALUE
;WITH cte
AS (
SELECT Split.a.value('.', 'VARCHAR(1000)') AS Value
FROM (
SELECT CAST('<S>' + REPLACE(Value, ',', '</S><S>') + '</S>' AS XML) AS Value
FROM @DyValue
) AS A
CROSS APPLY Value.nodes('/S') AS Split(a)
)
insert into mytable
SELECT *
FROM (
SELECT replace(LTRIM(SUBSTRING(Value, 0, CHARINDEX('|', value))),' ','') AS col1
,SUBSTRING(Value, CHARINDEX('|', Value) + 1, LEN(Value)) AS [col2]
,SUBSTRING(Value, CHARINDEX('/', Value) + 1, LEN(Value)) AS [col3]
FROM Cte
) dt
这允许我在|之前放置所有内容进入column1,以及进入第3列的所有内容。 我需要尝试将所有内容放在值'|'之间和'/'进入column2
我很难得到
,SUBSTRING(Value, CHARINDEX('|', Value) + 1, LEN(Value)) AS [col2]
仅在两个字符之间取这些值。
将运行的字符串类型的示例是
1234567890 |再见残酷的世界/我应该在第3栏,第2345678901页|再见残酷的世界/我应该在第3栏,3456789012 |再见残忍的世界/请把我放在第3栏,3456789012 |再见残忍的世界/请放我在第3栏,6324589657 |你好世界/我需要在第3栏,1145698763 |再见残酷的世界/我应该在第3栏,36985214728 |再见残酷的世界/我应该在第3栏,7412589635 |再见残忍的世界/我应该在第3栏,7412589635 |再见残酷的世界/我应该在第3栏,6398756951 |请帮帮我/请把我放在第3栏,
字符串将采用该格式,我只是将值更改为更有趣的内容。
非常感谢任何帮助。
使用 Microsoft SQL Server 2012(SP3)
答案 0 :(得分:0)
如果每个逗号之间总是三个单词且单词不超过128个字符,则使用PARSENAME
;WITH cte
AS (SELECT Split.a.value('.', 'VARCHAR(1000)') AS Value
FROM (SELECT Cast('<S>' + Replace(Value, ',', '</S><S>') + '</S>' AS XML) AS Value
FROM @DyValue) AS A
CROSS APPLY Value.nodes('/S') AS Split(a))
SELECT Parsename(string, 3),
Parsename(string, 2),
Parsename(string, 1)
FROM (SELECT Replace(Replace(value, '|', '.'), '/', '.') string
FROM cte)a
另一种方式,可以使用任意数量的字符
WITH cte
AS (SELECT Split.a.value('.', 'VARCHAR(1000)') AS Value
FROM (SELECT Cast('<S>' + Replace(Value, ',', '</S><S>') + '</S>' AS XML) AS Value
FROM @DyValue) AS A
CROSS APPLY Value.nodes('/S') AS Split(a))
SELECT LEFT(value, Charindex('|', value) - 1),
Substring(value, Charindex('|', value) + 1, Charindex('/', value) - Charindex('|', value) - 1),
Substring(value, Charindex('/', value) + 1, Len(value))
FROM cte
答案 1 :(得分:0)
如果我理解正确,这可能是一个解决方案:
onDestroy()
由于反馈而编辑:
SELECT
SUBSTRING(Value, 0, CHARINDEX('|', Value)) AS column1,
SUBSTRING(Value, CHARINDEX('|', Value) + 1, CHARINDEX('/', Value)
- CHARINDEX('|', Value) - 1) AS column2,
SUBSTRING(Value, CHARINDEX('/', Value) + 1, LEN(Value)) AS column3