Это о том же. Вставка объекта в отсортированный список является O (зарегистрируйте N), и выполнение этого для каждого элемента в списке, N, (таким образом создание списка) было бы O (N, регистрируют N), который является скоростью quicksort (или сортировка слиянием, которая ближе к этому подходу).
, Если бы Вы вместо этого вставили их на переднюю сторону, это был бы O (1), но выполнение quicksort после, это все еще будет O (N, регистрируют N).
я пошел бы с первым подходом, потому что он имеет потенциал, чтобы быть немного быстрее. Если начальный размер Вашего списка, N, намного больше, чем число элементов вставить, X, то подход вставки является O (X журналов N). Сортировка после вставки в заголовок списка является O (N, регистрируют N). Если N=0 (IE: Ваш список первоначально пуст), скорость вставки в отсортированный порядок, или сортировка впоследствии является тем же.
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
Я придумал то же самое, что и Шеннон Северанс.
Этот код является правильным вычисляемым столбцом.
Проверьте идею с помощью этого простого кода:
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
Вы не можете поместить логическое выражение в список поиска по регистру. В отличие от языков типа 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