#mysql #sql-server
#mysql #sql-server
Вопрос:
Я привык работать в MS SQL Server, поэтому MySQL всегда немного чужд мне. Я написал следующее для MS SQL Server, и я пытаюсь перенести его в MySQL:
CREATE FUNCTION ToRadians
(@Degrees float)
RETURNS float
AS
BEGIN
DECLARE @Radians float
SELECT @Radians = @Degrees * 3.1415927 / 180
RETURN @Radians
END
GO
У меня
CREATE FUNCTION ToRadians
(@Degrees float)
RETURNS float
BEGIN
DECLARE @Radians float;
SELECT @Radians = @Degrees * 3.1415927 / 180;
RETURN @Radians;
END
но в phpMyAdmin это выдает ошибку:
Error
SQL query:
CREATE FUNCTION ToRadians(
@Degrees float
) RETURNS float AS BEGIN DECLARE@Radians float;
MySQL said: Documentation
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '@Degrees float)
RETURNS float
AS
BEGIN
DECLARE @Radians float' at line 2
Выполненный мной поиск показывает, что приведенный выше UDF MySQL должен быть правильным, но это, очевидно, не так. SELECT version() возвращает 5.0.77
Ответ №1:
CREATE FUNCTION ToRadians (in_degrees FLOAT) RETURNS FLOAT
DETERMINISTIC
BEGIN
RETURN in_degrees * 3.1415927 / 180;
END;
ДЕТЕРМИНИРОВАННЫЙ, потому что возвращаемое значение в градусах всегда должно быть одинаковым в радианах.
Также функции DEGREES() и RADIANS() уже существуют в mysql. RADIANS()
Комментарии:
1. Я не знал, что эта функция существует. Необычно.
Ответ №2:
- Не используйте @ в именах переменных MySQL, это создает локальную переменную сеанса.
- Вероятно, вам нужно заменить стандартный разделитель, который является точкой с запятой, на другой символ, например // :
DELIMITER //
перед определением вашей функции, затем//
сразу после функции, затем переключите разделитель обратно на точку с запятой (DELIMITER ;
)
Комментарии:
1. Кроме того, оказывается, я не могу использовать SELECT для выполнения математики внутри функции. Я должен был использовать SET Radians = Degrees * 3.1415927 / 180;
2. Вы также могли бы сделать
SELECT ... INTO [variable]
…