无法使用 RIGHT 函数创建计算列,因为 CHARINDEX returns null
Cannot create a Computed column using RIGHT function because CHARINDEX returns null
所以我有一个文档 table,我想在其中使用列 FileName
添加一个名为 FileType
的计算列。下面是我用来添加计算列的代码:
ALTER TABLE dbo.Document
Add FileType AS UPPER(RIGHT(FileName,CHARINDEX('.',REVERSE(FileName))-1))
事实证明,FileName
列中的某些数据的名称中没有 '.'
,这是导致问题的原因。我想以某种方式实现对 return CharIndex
的检查,只检查那些在 FileName
中包含 '.'
的数据。但是我不能在Alter
语句中写Select
语句。
注意:我试图从以下链接中找到解决方案,这些链接帮助我找到了问题,但我无法从中获得任何解决方案。
使用 case 表达式使其成为条件表达式,例如
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))
不需要条件逻辑。
所以我有一个文档 table,我想在其中使用列 FileName
添加一个名为 FileType
的计算列。下面是我用来添加计算列的代码:
ALTER TABLE dbo.Document
Add FileType AS UPPER(RIGHT(FileName,CHARINDEX('.',REVERSE(FileName))-1))
事实证明,FileName
列中的某些数据的名称中没有 '.'
,这是导致问题的原因。我想以某种方式实现对 return CharIndex
的检查,只检查那些在 FileName
中包含 '.'
的数据。但是我不能在Alter
语句中写Select
语句。
注意:我试图从以下链接中找到解决方案,这些链接帮助我找到了问题,但我无法从中获得任何解决方案。
使用 case 表达式使其成为条件表达式,例如
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))
不需要条件逻辑。