所以我有一个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
答案 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))
不需要条件逻辑。