html - 消除或翻译从 XML 文件导入的 SQL 中的 HTML 字符

标签 html sql sql-server xml sql-server-2008-r2

我在运行分解 XML 文件并将数据导入 SQL Server 的过程时遇到了一个问题。

已经成功运行几个月了,今天却报错:

Conversion failed when converting date and/or time from character string.

这是失败的地方

SELECT 
ltrim(rtrim(T.X.value('Cell[4]/Data[1]','varchar(max)'))) AS StartDate
,ltrim(rtrim(T.X.value('Cell[5]/Data[1]','varchar(max)'))) AS EndDate
FROM @xml.nodes('/Workbook[1]/Worksheet1]/Table[1]/Row') as T(X)

当我查看 XML 文件时,我注意到一些日期是这样写的:

01/12/2016&#160

这个字符   是一个 Non-breaking space .

我想知道 SQL Server 中是否有任何方法可以解决这些类型的问题?对于这个特定问题,我可以使用 REPLACE:

SELECT 
REPLACE(ltrim(rtrim(T.X.value('Cell[4]/Data[1]','varchar(max)'))),'&#160','') AS StartDate
,ltrim(rtrim(T.X.value('Cell[5]/Data[1]','varchar(max)'))) AS EndDate
FROM @xml.nodes('/Workbook[1]/Worksheet1]/Table[1]/Row') as T(X)

但是如果出现其他 XML/HTML 字符,是否有一种方法可以普遍检查/处理它们?

最佳答案

我想您可以创建一个您希望替换/删除的字符串辅助表并将其加入您的查询。这比对每个字符进行硬编码更可取,并且可以让您轻松扩展功能。需要注意的是,我希望它会根据您需要替换/删除的字符数来减慢您的查询速度。

SELECT 
  REPLACE(ltrim(rtrim(T.X.value('Cell[4]/Data[1]','varchar(max)'))),
          StringsToRemove.string,'') AS StartDate,
  REPLACE(ltrim(rtrim(T.X.value('Cell[5]/Data[1]','varchar(max)'))),
          StringsToRemove.string, '') AS EndDate
FROM
  @xml.nodes('/Workbook[1]/Worksheet1]/Table[1]/Row') as T(X),
  StringsToRemove

关于html - 消除或翻译从 XML 文件导入的 SQL 中的 HTML 字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34752651/

相关文章:

java - HTML 电子邮件的隐藏/显示按钮

javascript - 如何在页面加载/提交时将复选框设置为默认 false?

android - 活跃的Android多对多关系

sql - PRAGMA table_info(table-name) 在 SQLite 数据库中如何工作?

javascript - 获取tr jquery td的每个值的动态值

css - 在页面之间切换导航栏 Bootstrap 3.2

sql - PostgreSQL 10 - IN 和任何性能莫名其妙的行为

sql-server - 为什么 UNION 只返回一个 null?

javascript - 如何使用 React-Native 连接 MS SQL 数据库?

sql-server - 如何生成非常大的数据库模式的图表 (SQL Server)