在MSSQL Server中将nvarchar转换为数字

时间:2018-02-15 11:56:14

标签: sql sql-server

我有一个nvarchar列,其中包含一些条目列表,例如(包括NULL) -

    public function getListByShopIdAndCategoryIdQuery($shopId, $categoryId, $offset){
    $catQueryBuilder = ...

    $catQueryBuilder->select("ma.id")
        ->from($this->getEntityName(), "ma")
        ->innerJoin("ma.categories", "ca")
        ->where("ca.id = :catId");


    $builder = ...

    $builder->select(["m", 'c'])
        ->from($this->getEntityName(), "m")
        ->join('m.shops', 's')
        ->join('m.categories', 'c')
        ->where($builder->expr()->in('m.id', $catQueryBuilder->getQuery()->getDQL()))
        ->andWhere("s.id=:shopId")
        ->setParameter("catId", $categoryId)
        ->setParameter("shopId", $shopId)
        ->setMaxResults(2)
    ;

    return $builder->getQuery();
}

我想将其转换为数字字段,以便我可以使用此字段进行一些计算。但是,我收到以下错误消息 -

  

将数据类型nvarchar转换为float时出错。

有人可以帮忙吗?

4 个答案:

答案 0 :(得分:9)

您的数据似乎的值不是有效数值。使用try_convert()

select try_convert(numeric(38, 12), col)

如果转换失败,这将返回NULL

您可以通过执行以下操作找到转换失败的值:

select col
from t
where try_convert(numeric(38, 12), col) is null and col is not null;

只要您将列引用为数字,就需要使用try_convert()select中的转化仅适用于select

答案 1 :(得分:1)

只是为了证明在需要OP的情况下戈登的方法:

create table #test(val nvarchar(100));

insert into #test values
('-1.00000'),
('0.000000'),
('0.010000'),
('0.100000'),
('0.500000'),
('00000000'),
('1.000000'),
('1.500000'),
('10.00000'),
('10.50000'),
('100.0000'),
('1000.000'),
('1001.000'),
('1006.000'),
(NULL),
(NULL)

select val, TRY_CONVERT(numeric(38,12),val) as converted_val from #test

答案 2 :(得分:1)

您可以在SQLServer中尝试使用convert函数:

select Convert(float, "column_name") from TABLE

空字段返回为0。

答案 3 :(得分:0)

使用try_convert(numeric(38,5), [ColumnName])

当它无法转换字符串时,将返回NULL。如果可以,它将能够将其转换为数字