所以我有一个文档表,我想在其中使用列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))
不需要条件逻辑。