我有一个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时出错。
有人可以帮忙吗?
答案 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。如果可以,它将能够将其转换为数字