Заменить всегда заменяя нулевые значения - PullRequest
0 голосов
/ 03 мая 2010

Почему

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

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

Спасибо.

Ответы [ 3 ]

1 голос
/ 03 мая 2010

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

Сделайте это вместо:

select isnull(nullif(charindex(' ',field),0),len(field))
0 голосов
/ 03 мая 2010

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

Select
    Case
    When Field Like '%-%' Then Replicate(' ', Len(Field))
    Else Field
    End
0 голосов
/ 03 мая 2010

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

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

Вы должны использовать приведение, чтобы избежать приоритета типа данных

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

...