我在表格中有一个特定的列,它只包含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]
...我如何让它发挥作用?
答案 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)
。