тот же оператор конкатенации SQL для mysql, mssql, oracle - PullRequest
1 голос
/ 11 октября 2011

Я пытаюсь использовать один и тот же оператор sql для трех вышеупомянутых СУБД ... но проблема в том, что в нем задействована конкатенация строк, но для каждой операции конкатенации в каждой базе данных используются разные способы ... но мне нужен один операторчья-то помощь

Ответы [ 5 ]

3 голосов
/ 11 октября 2011

Возможно, вы можете обойти это в коде своего приложения, используя заполнитель для конкатенации в ваших операторах sql, а затем заменив его на правильный стиль для используемых вами rdbms:

select {conpre} myfield1 {conmid} myfield2 {conmid} myfield3 {conend}
  from mytable

Затем в псевдокоде:

if rdbms is sqlserver
    conpre = ""
    conmid = " + "
    conend = ""
else if rdbms is mysql
    conpre = "concat("
    conmid = ", "
    conend = ")"
else if rdbms is oracle
    conpre = ""
    conmid = " || "
    conend = ""
else if
    ' etc...
end if

stmt = replace(stmt, "{conpre}", conpre)
stmt = replace(stmt, "{conmid}", conmid)
stmt = replace(stmt, "{conend}", conend)
1 голос
/ 15 октября 2011

Существует способ сделать это с помощью escape-последовательностей ODBC

SELECT {fn concat (col1, {fn concat (col2, col3)})}
FROM YourTable

Начиная с мое текущее понимание это будет нормально работать в SQL Server и MySQL, но для Oracle зависит от способа подключения.

1 голос
/ 11 октября 2011

Простой ответ на вопрос, кажется, нет.

Однако ...

Что если вы создадите пакет dbo в Oracle? Разве также невозможно в mysql создать функцию с именем concat в отдельной базе данных с именем dbo, чтобы функция вызывалась с использованием синтаксиса dbo.concat (a, b, c)?

К сожалению, mysql не поддерживает параметры по умолчанию (если они не были недавно изменены) или перегрузку функций, поэтому вам придется создавать функцию on для каждого числа аргументов:

concat2 (s1, s2)

concat3 (s1, s2, s3)

и т. Д.

1 голос
/ 11 октября 2011

Я бы не стал писать свое собственное решение проблемы и использовал бы один из уже доступных инструментов базы данных muti.Если вы столкнулись с этой проблемой, однажды скоро столкнетесь с ней снова.

У меня нет связи со следующим, но вы можете попробовать Datanamic Multirun

0 голосов
/ 29 сентября 2016

MySQL:

   SELECT CONCAT('New ', 'York ', 'City');

Вывод: Нью-Йорк

Oracle:

SELECT 'The city' || ' is ' || 'Paris' FROM dual;

Выводэто: город Париж

SQL Server:

SELECT 'The city' + ' is ' + 'Paris';

Выходные данные: город Париж

 SELECT CONCAT('The city', ' is ', 'Paris');

Выходные данные:город париж

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...