我在运行分解 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 
这个字符
是一个 Non-breaking space .
我想知道 SQL Server 中是否有任何方法可以解决这些类型的问题?对于这个特定问题,我可以使用 REPLACE
:
SELECT
REPLACE(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/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/