2011-03-09 39 views
7

基本上我想这样做:如何选择只在列(SQL)号码记录

我想返回一个记录集一个nvarchar的值(ID),转换成整数,如果它包含了一些。如果ID可以转换为数字,则将该行添加到SELECT记录集。如果不是,跳过那一行。

我认为SQL应该看起来像这样。

(ID是在dbo.Table nvarchar的(10))

CREATE TABLE #Temp (ID int) 
INSERT INTO #Temp SELECT ID FROM Table Where ISNumeric(Id)=0 

但我得到一个错误:nvarchar的值 '默认' 为数据类型int。如果我做的SELECT CAST(ID as int)也不起作用。

回答

13

为了安全起见,忘掉ISNUMERIC

如果你不希望负数,您可以使用此

INSERT INTO #Temp SELECT ID FROM Table 
Where Id > '' -- is not the empty string and is not null 
    AND not ID like '%[^0-9]%' -- contains digits only 
9

ISNumeric(Id)=0应该ISNumeric(Id)=1

然而ISNUMERIC有问题

来看,这种

SELECT ISNUMERIC('2d5'), ISNUMERIC('-'), ISNUMERIC('+') 

这些都返回1

看看IsNumeric, IsInt, IsNumber的一些方法,以找出是否它可以转换成整数

-1

也许这一个可以帮助:

select column_desired from requested_table <> 0 or is not null