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

时间:2019-05-07 03:58:09

标签: sql sql-server calculated-columns

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

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

事实证明,“文件名”列中的某些数据名称中没有'.',这导致了问题。我想以某种方式实施检查,以仅在其FileName中返回由CharIndex组成的那些数据的'.'。但是我不能在Select语句中写一个Alter语句。

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

Error: invalid length parameter passed to the right function in name parsing script

Invalid length parameter passed to the RIGHT function

Invalid length parameter passed to the RIGHT function in update statement

2 个答案:

答案 0 :(得分:3)

使用case语句使其成为条件,例如

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

答案 1 :(得分:2)

最简单的方法是添加定界符:

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

不需要条件逻辑。

相关问题