为什么
left(FIELD, replace(nullif(charindex('-', FIELD), 0), null, len(FIELD)))
总是返回null?查询背后的想法是,如果charindex()返回0,则将结果转换为null,然后将null转换为字段的长度。因此,如果' - '不存在,则显示整个字符串。由于某种原因,它使每一行都等于null。
谢谢。
答案 0 :(得分:1)
因为如果任何一个参数为NULL,REPLACE()将返回NULL。在文档中说的是这样的。
请改为:
select isnull(nullif(charindex(' ',field),0),len(field))
答案 1 :(得分:0)
因此,如果字段包含“ - ”,则显示长度。如果没有“ - ”,请显示字段?
CASE
WHEN FIELD NOT LIKE '%-% THEN FIELD
ELSE CAST(LEN (FIELD) AS varchar(4))
END
您需要强制转换以避免数据类型优先级
如果希望NULL FIELD以不同的方式工作(它将转到ELSE子句)
,则翻转条件答案 2 :(得分:0)
当你说then convert the null into the length of the field
时,你的意思是将Null转换为一系列空格,如下所示:
Select
Case
When Field Like '%-%' Then Replicate(' ', Len(Field))
Else Field
End