STUFF函数sql返回null?

时间:2015-07-09 14:35:23

标签: sql sql-server

我在表格中有一个特定的列,它只包含Nvarchar中长度为3的数字。不幸的是,有些用户写了“12”,但他们应该写成'012'。当时没有足够的验证。

我需要解决这个问题。这是我使用的逻辑:

UPDATE [Mandats_Approvisionnement].[dbo].[ARTICLE_ECOLE] 
SET [UNIT_ADM] = STUFF(UNIT_ADM, 0, 0, '0') 
WHERE LEN(UNIT_ADM) = 2;

错误如下:

  

无法将值NULL插入“UNIT_ADM”列表中   'Mandats_Approvisionnement.dbo.ARTICLE_ECOLE';列不允许   空值。更新失败。

我无法看到问题所在,我验证了所有记录至少包含2个字符,因此STUFF函数不能返回null,因为该表列中没有NULL条记录[unit_adm] ...我如何让它发挥作用?

2 个答案:

答案 0 :(得分:5)

它应该是stuff(UNIT_ADM,1,0,'0'),因为如果起始位置为0,则stuff返回null。

引用文档:

  

如果开始位置或长度为负,或者如果开始   position大于第一个字符串的长度,空字符串是   回。如果起始位置为0,则返回空值。

答案 1 :(得分:1)

您可以使用

使这更简单
file_to_test = 'public/system/companies/:id/original/test_image.jpg'

if !File.exist?(file_to_test)

  company.logo.destroy
  company.save

end

而不是right('0' + UNIT_ADM, 3)