2012-08-16 155 views
0

我有一个主键通常采用的格式为$$$$#####$$的数据表,虽然在这里没有数字时有一些例外。我想提取密钥的数字部分,然后使用它,以便我可以生成唯一的主键。将nvarchar值转换为数据类型时转换失败int

因此,我创建了一个视图,其中包含一列仅显示数值并忽略任何不能转换为数字的项目。

当我写了一个查询从视图中选择一个特定的项目,我得到转换为nvarchar值数据类型 INT当

转换失败。

它会出现,尽管我特别忽略了视图中的异常,他们仍然在引用一些方法。

任何帮助将不胜感激。

马特

+3

SQL Server将内嵌视图到查询,因此,中投为INT过滤器之前发生可以重新排列查询的组成部分。解决这个问题的唯一方法是使用'CASE'语句(或者如果您使用的是SQL Server 2012,则使用“TRY_CONVERT”)。 – 2012-08-16 11:09:12

+0

在这里解释更完整。 [链接](http://stackoverflow.com/questions/5191701/tsql-divide-by-zero-encountered-despite-no-columns-containing-0) – mattbloke 2012-08-16 13:36:46

回答

0

我想提取关键的数字部分,然后用它,所以我可以 唯一主键生成。

使用此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

希望这有助于

相关问题