Оценка булева выражения SQL Server

Это о том же. Вставка объекта в отсортированный список является O (зарегистрируйте N), и выполнение этого для каждого элемента в списке, N, (таким образом создание списка) было бы O (N, регистрируют N), который является скоростью quicksort (или сортировка слиянием, которая ближе к этому подходу).

, Если бы Вы вместо этого вставили их на переднюю сторону, это был бы O (1), но выполнение quicksort после, это все еще будет O (N, регистрируют N).

я пошел бы с первым подходом, потому что он имеет потенциал, чтобы быть немного быстрее. Если начальный размер Вашего списка, N, намного больше, чем число элементов вставить, X, то подход вставки является O (X журналов N). Сортировка после вставки в заголовок списка является O (N, регистрируют N). Если N=0 (IE: Ваш список первоначально пуст), скорость вставки в отсортированный порядок, или сортировка впоследствии является тем же.

5
задан OMG Ponies 15 September 2009 в 21:00
поделиться

3 ответа

Expressions can not return true or false in SQL Server. (No boolean type) But you can move the entire expression inside the when like:

alter table appriasaldata add 
    IsOwnerOccupied as 
     case when ((charindex(locastreetnumber, owneraddress) = 0) 
          or (charindex(locastreetname, owneraddress) = 0))
        THEN 1 ELSE 0
     end
9
ответ дан 13 December 2019 в 05:38
поделиться

Я придумал то же самое, что и Шеннон Северанс.

Этот код является правильным вычисляемым столбцом.

Проверьте идею с помощью этого простого кода:

DECLARE @appriasaldata TABLE (
    owneraddress        varchar(100),
    locastreetnumber    varchar(100),
    locastreetname      varchar(100)
)

INSERT INTO @appriasaldata (
    owneraddress,
    locastreetnumber,
    locastreetname
)
VALUES (
    '2701 SW Vaughn Street, Portland, OR',
    '2701',
    'SW Vaughn Street'
)

SELECT
    owneraddress,
    locastreetnumber,
    locastreetname,
    charindex(locastreetnumber, owneraddress),
    charindex(locastreetname,   owneraddress),
    CASE
        WHEN charindex(locastreetnumber, owneraddress) <> 0
          or charindex(locastreetname,   owneraddress) <> 0
        THEN 1
        ELSE 0
    END
FROM @appriasaldata
2
ответ дан 13 December 2019 в 05:38
поделиться

Вы не можете поместить логическое выражение в список поиска по регистру. В отличие от языков типа C, в T-SQL логическое значение нельзя сравнивать с другими значениями. И последнее, но не менее важное, Transact-SQL не имеет TRUE и FALSE.

Поэтому вам нужно переместить логическое выражение в регистр WHEN , который ожидает логическое значение:

alter table appriasaldata add 
    IsOwnerOccupied as 
     case when
        (charindex(locastreetnumber, owneraddress) = 0) 
       or (charindex(locastreetname, owneraddress) = 0)
         THEN 1 ELSE 0
     end
2
ответ дан 13 December 2019 в 05:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: