从Nvarchar列中检索数值

时间:2015-06-11 10:41:25

标签: sql-server

我有一个名为Custom#5的nvarchar列表,​​它包含以下数据。

 row number  Custom#5   
    1             267.5
    2             tbc
    3
    4             34

我希望能够清理这些数据,因此总是返回一个数值。

 row number  Custom#5   
    1              267.5
    2              0
    3              0
    4             34

我当前的查询是;

   SELECT CASE 
        WHEN BomHeaders_1.Custom#5 NOT LIKE '%[^0-9]%'
            THEN 0
        WHEN BomHeaders_1.Custom#5 IS NULL
            THEN 0
        ELSE BomHeaders_1.Custom#5
        END AS Custom5
FROM [FS25-W2K8\SQLEXPRESS].sagel50_46772.dbo.BomHeaders AS BomHeaders_1
INNER JOIN [FS25-W2K8\SQLEXPRESS].sagel50_46772.dbo.BomComponents AS BomComponents_1 ON BomHeaders_1.ID = BomComponents_1.HeaderID
INNER JOIN [FS25-W2K8\SQLEXPRESS].sagel50_46772.dbo.BomHeaders AS BomHeaders_2 ON BomComponents_1.StockCode = BomHeaders_2.BomReference
INNER JOIN manu_STOCK ON BomHeaders_1.BomReference = manu_STOCK.STOCK_CODE
WHERE (BomComponents_1.StockCode LIKE N'21%')

我得到的当前错误是 “将nvarchar值'267.5'转换为数据类型int时转换失败。”

3 个答案:

答案 0 :(得分:3)

如果您使用2012或更高版本,我会使用tryparse函数

join

答案 1 :(得分:0)

declare @t table (R INT,C varchar(10))
inSERT INTO @t(R,c)values (1,'267.5'),(2,'tbc'),(3,''),(4,'34')

select R,CASE WHEN C LIKE '%[^a-zA-Z]%' THEN  C ELSE CAST(0 AS VARCHAR) END from @t

答案 2 :(得分:0)

如果你使用SQL Server< 2012年并没有使用try_parse的选项,您可以使用:

DECLARE @string nvarchar(255)
SET @string = 'Hali891236.5€hHalo'

SELECT Substring(
          @string,
          PATINDEX('%[0-9.]%',@string),
          PATINDEX('%[^0-9.]%',
                Substring(
                      @string,
                      PATINDEX(
                            '%[0-9.]%',
                            @string
                      ),
                      LEN(@string)
                )
          )-1
     )
GO