Skipton Corp Ответов: 2

Как тот случай, когда и заменить функции разные?


Привет,

Во время моих приключений по обучению SQL Server 2012 Express я наткнулся на функцию REPLACE, преподаваемую W3School.

Мое ограниченное понимание этого заключается в следующем:
SELECT REPLACE('SQL Tutorial', 'SQL', 'Code Project');

Что вы можете заменить слово(ы), в данном примере приведенное выше слово " SQL " на "проект кода".

Однако я бы использовал случай, когда функция выглядит следующим образом:
CASE
WHEN fieldname  = 'SQL Tutorial'
THEN 'Code Project Tutorial'
ELSE fieldname
END AS 'fieldname'


Случай, когда имеет больше смысла, и мне интересно, когда бы вы применили функцию замены? Можно ли использовать функцию REPLACE вместо функции CASE WHEN?

Предположим, можно было бы использовать следующее, Но опять же, какой в этом смысл?

CASE
WHEN fieldname = 'SQL Tutorial'
THEN REPLACE('SQL Tutorial', 'SQL', 'Code Project')
ELSE fieldname
END AS 'fieldname' 


Мне просто немного любопытно.
Спасибо.

Что я уже пробовал:

Я изучаю SQL Server 2012 Express

2 Ответов

Рейтинг:
1

OriginalGriff

Replace - это одна из чрезвычайно ограниченных функций манипулирования строками SQL, и она не работает так, как в вашем примере case when.
Да,

SELECT REPLACE('SQL Tutorial', 'SQL', 'Code Project');
дать вам Code Project Tutorial и так будет всегда
CASE
WHEN fieldname  = 'SQL Tutorial'
THEN 'Code Project Tutorial'
ELSE fieldname
END AS 'fieldname'
Но... версия замены также изменит "My SQL Tutorial" на "My CodeProject Tutorial" и "This is an introduction to the MySQL database" на "This is an introduction to the MyCode Project database", где случай, когда версия ничего не изменит.

Ваша версия "more sense", использующая CASE WHEN, только "яснее", потому что вы используете фиксированные элементы для предоставления своих результатов - и почти весь SQL этого не делает, он работает с дженериками, а не с фиксированным выводом.


Skipton Corp

Спасибо OriginalGriff за ясность.

OriginalGriff

Всегда пожалуйста!

Рейтинг:
1

Zalak Artist

REPLACE-это строковая функция, которая позволяет заменять определенные символы в определенной строке.

Случай, когда это похоже на условную функцию, которая принимает решения на основе условий, предусмотренных в операторе.

В вашем случае приведенный ниже код может быть использован, потому что условие в робастном или статическом состоянии .

CASE
WHEN fieldname  = 'SQL Tutorial'
THEN 'Code Project Tutorial'
ELSE fieldname
END AS 'fieldname'


Но другое решение можно использовать, если вы проверяете, содержит ли имя поля подстроку "SQL".

Например, следующим образом:

CASE
WHEN CHARINDEX('SQL',fieldname)>0
THEN REPLACE(fieldname, 'SQL', 'Code Project')
ELSE fieldname
END AS 'fieldname' 


В приведенном выше коде условие является динамическим, и более целесообразно использовать функцию замены.


Skipton Corp

Спасибо Вам за решение.

Zalak Artist

Добро пожаловать :)