2010-05-03 5 views
0

ПочемуЗаменить всегда заменить нулевые значения

left(FIELD, replace(nullif(charindex('-', FIELD), 0), null, len(FIELD))) 

всегда возвращает нуль? Идея запроса заключается в том, что если charindex() возвращает 0, затем преобразует результаты в нуль, а затем преобразует нуль в длину поля. Поэтому, если '-' не существует, покажите всю строку. По какой-то причине он делает каждую строку равной нулю.

спасибо.

+0

Вы можете добавить входной и выходной образец, пожалуйста? – gbn

ответ

1

Поскольку REPLACE() возвращает, если NULL любой из аргументов равен NULL. Говорит так в документах.

ли это вместо:

select isnull(nullif(charindex(' ',field),0),len(field)) 
0

Итак, если поле содержит «-», укажите длину. Если нет «-», показать поле?

CASE 
    WHEN FIELD NOT LIKE '%-% THEN FIELD 
    ELSE CAST(LEN (FIELD) AS varchar(4)) 
END 

Вам нужно бросание, чтобы избежать DATATYPE старшинства

Переверните условие, если вы хотите NULL FIELD работать по-другому (он будет идти к пункту ELSE)

+1

Я не уверен, о чем спрашивает OP, но вам нужно другое ')' в конце вашего дела ELSE. –

+0

@KM: спасибо, исправлено – gbn

0

Когда вы говорите then convert the null into the length of the field, вы имеете в виду преобразовать NULLS в серию пространств, как так:

Select 
    Case 
    When Field Like '%-%' Then Replicate(' ', Len(Field)) 
    Else Field 
    End 
Смежные вопросы