将nvarchar值转换为数据类型时转换失败int
问题描述:
我有一个主键通常采用的格式为$$$$#####$$
的数据表,虽然在这里没有数字时有一些例外。我想提取密钥的数字部分,然后使用它,以便我可以生成唯一的主键。将nvarchar值转换为数据类型时转换失败int
因此,我创建了一个视图,其中包含一列仅显示数值并忽略任何不能转换为数字的项目。
当我写了一个查询从视图中选择一个特定的项目,我得到转换为nvarchar值数据类型 INT当
转换失败。
它会出现,尽管我特别忽略了视图中的异常,他们仍然在引用一些方法。
任何帮助将不胜感激。
马特
答
我想提取关键的数字部分,然后用它,所以我可以 唯一主键生成。
使用此Fastest way to remove non-numeric characters from a VARCHAR in SQL Server:
CREATE Function [fnRemoveNonNumericCharacters](@strText VARCHAR(1000))
RETURNS VARCHAR(1000)
AS
BEGIN
WHILE PATINDEX('%[^0-9]%', @strText) > 0
BEGIN
SET @strText = STUFF(@strText, PATINDEX('%[^0-9]%', @strText), 1, '')
END
RETURN @strText
END
你列的值传递给函数,然后将其转换为整数。您可以创建另一个函数来转换此检查,即在应用上述函数后列值是否包含任何数值。
另外Reference。
希望这有助于
SQL Server将内嵌视图到查询,因此,中投为INT过滤器之前发生可以重新排列查询的组成部分。解决这个问题的唯一方法是使用'CASE'语句(或者如果您使用的是SQL Server 2012,则使用“TRY_CONVERT”)。 – 2012-08-16 11:09:12
在这里解释更完整。 [链接](http://stackoverflow.com/questions/5191701/tsql-divide-by-zero-encountered-despite-no-columns-containing-0) – mattbloke 2012-08-16 13:36:46