Пользовательская функция в SQL - PullRequest
0 голосов
/ 19 февраля 2020

Я пытаюсь написать UDF, похожий на этот, но он продолжает сбой синтаксиса. Я получаю сообщение об ошибке рядом с concat.

CREATE FUNCTION ParseUserAgentString (@user_agent VARCHAR(200))
RETURNS VARCHAR(400)
RETURN CONCAT( user_agent LIKE "%Chrome%",
    " ",
    user_agent LIKE "%Firefox%",
    " ", 
    user_agent LIKE "%Mozilla%",
    " ", 
    user_agent LIKE "%MSIE%",
    " ",
    user_agent LIKE "%Opera%",
    " ", 
    user_agent LIKE "%Safari%"
    );

При выполнении я получаю следующую ошибку.

[SQL: CREATE FUNCTION ParseUserAgentString (user_agent VARCHAR(200))
 RETURNS VARCHAR(200)
 RETURN CONCAT_WS(" ",
     user_agent LIKE "%Chrome%",
     user_agent LIKE "%Firefox%",
     user_agent LIKE "%Mozilla%",
     user_agent LIKE "%MSIE%",
     user_agent LIKE "%Opera%",
     user_agent LIKE "%Safari%"
     );]
(Background on this error at: http://sqlalche.me/e/e3q8)```


  [1]: https://i.stack.imgur.com/biGrF.png

1 Ответ

0 голосов
/ 19 февраля 2020

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

Тип данных VARCHAR требует длины.

CREATE FUNCTION ParseUserAgentString (user_agent VARCHAR(200))
RETURNS VARCHAR(200)
RETURN CONCAT_WS(" ",
    user_agent LIKE "%Chrome%",
    user_agent LIKE "%Firefox%",
    user_agent LIKE "%Mozilla%",
    user_agent LIKE "%MSIE%",
    user_agent LIKE "%Opera%",
    user_agent LIKE "%Safari%"
    );
...