无法使用 RIGHT 函数创建计算列,因为 CHARINDEX 返回 null



所以我有一个文档表,我想在其中使用列FileName添加一个名为FileType的计算列。下面是我用来添加计算列的代码:

ALTER TABLE dbo.Document
Add FileType AS UPPER(RIGHT(FileName,CHARINDEX('.',REVERSE(FileName))-1))

事实证明FileName列中的某些数据的名称中没有导致问题的'.'。我想以某种方式实现一个检查,以仅返回由FileName中的'.'组成的数据的CharIndex。但我不能在Alter声明中写一个Select声明。

注意:我试图从以下链接中找到解决方案,这些链接帮助我找到了问题,但我无法从中得出任何解决方案。

错误:在名称分析脚本中传递给正确函数的长度参数无效

传递给 RIGHT 函数的长度参数无效

在更新语句中传递给 RIGHT 函数的长度参数无效

使用大小写表达式使其有条件,例如

UPPER(RIGHT(FileName, case when CHARINDEX('.',REVERSE(FileName)) > 0 then CHARINDEX('.',REVERSE(FileName))-1 else len(Filename) end))

最简单的方法是添加分隔符:

UPPER(RIGHT(FileName, CHARINDEX('.', REVERSE(FileName) + '.') - 1))

不需要条件逻辑。

相关内容

最新更新