【问题标题】:Split table data in SQL and replace with results在 SQL 中拆分表数据并替换为结果
【发布时间】:2011-06-18 10:12:01
【问题描述】:

我需要根据拆分参数从每个表中删除一堆不需要的数据。

我的 SQL 表正在存储一堆用于缓存的 HTML,数据已经在 SQL 中并且它正在增长到相当大,所以现在我想根据字符串从每个表中拆分一些我不使用的数据并使用新结果更新表格。

cacheHTML 表保存着这样的数据

<html>
... (a bunch of data I don't need)
<first div>
... (the data I do want to save)
</div>
... (data I don't care about also)
</html>

我只想要第一个 div 中的内容,并删除之前的所有 html。

有什么简单的方法吗?我需要对 5k 行缓存数据执行此操作...

我需要一个函数或方法来告诉我 string1 到 string2 之间的所有内容,然后用结果替换表格。任何帮助将不胜感激谢谢!

【问题讨论】:

  • 您能否提供一个示例架构和示例数据?
  • 您不想在纯 SQL 中执行此操作。获得一种您非常了解的可以连接到数据库的语言(Perl、Python、Ruby、Java、C#,甚至是 C++,无论您最擅长什么)。使用正则表达式很容易。
  • 什么您使用的数据库和版本?字符串和 XML 支持因供应商而异.....另外:您能保证您的 HTHL 真的符合 XHTML(真正的蓝色 XML)吗?这会让事情变得很多更容易!

标签: sql string sql-server-2008 split substring


【解决方案1】:

你可以做这样的事情。仅当您始终需要 html 字符串中第一个 div 内的文本时才有效。我假设 SQL Server 作为数据库系统,但它可能很容易被翻译给其他人。

示例 html 字符串:

<html>
<head>
    <title>Stuff i dont need</title>
</head>
<body>
    <h1>Stuff i dont need</title>
    <p>I dont need any of this data</title>
    <div>This is the data i need to save!</div>
    <h3>Dont need this</h3>
    <div>Wont need this either!<div>
    <h3>Bye</h3>
</body>

执行更新的 SQL:

UPDATE cacheHTML
SET htmlText = REPLACE(SUBSTRING(htmlText, CHARINDEX('<div>', htmlText, 0), CHARINDEX('</div>', htmlText, 0) - CHARINDEX('<div>', htmlText, 0)), '<div>', '')

【讨论】:

  • 子字符串的第三个值似乎给出了错误:“传递给 LEFT 或 SUBSTRING 函数的长度参数无效。”第一个 CHARINDEX 正在工作,但 END 的第二个没有。
  • 发现我的 HTML 数据是每张表大约 10k,而 CHARINDEX 似乎对 8k 以上的任何数据都有数据大小限制bennadel.com/blog/…
  • 保存 HTML 字符串的列的数据类型是什么?如果您使用 varchar(max) 或 nvarchar(max),它应该可以工作。
  • nText 由于长度太大,还需要保存 UTF-8 结果。
  • 你真的应该使用 nvarchar(max) 代替。 nText 和 Text 已弃用,将在 SQL Server 的未来版本中删除。此外,nvarchar(max) 和 varchar(max) 最多可以容纳 2gb 的数据,所以你应该被覆盖 + 他们使用字符串函数,如 SUBSTRING 和 CHARINDEX 等。msdn.microsoft.com/en-us/library/ms178158.aspx
猜你喜欢
  • 1970-01-01
  • 2012-06-22
  • 2015-01-24
  • 2020-10-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多