С MSSQL на MYSQL, используя СЛУЧАЙ, КОГДА ПОДПИСЫВАЕТСЯ И CHARINDEX - PullRequest
1 голос
/ 01 февраля 2012

У меня возникли реальные трудности с преобразованием приведенного ниже оператора MSSQL для получения тех же результатов в MYSQL.

Запрос MSSQL выглядит следующим образом:

SELECT Radius_AdslUser.Password, Radius_AdslIp.IpAdd, Route = 
CASE WHEN Radius_AdslIP.Route IS NULL 
THEN NULL 
WHEN Radius_AdslIp.TotalIp = 8 
THEN Radius_AdslIP.Ipadd + '/29 ' + SUBSTRING(Radius_AdslIp.Route, 10, Charindex(' ', Radius_AdslIp.Route) - 10) + ' 1' 
WHEN Radius_AdslIp.TotalIp = 4
THEN Radius_AdslIP.Ipadd + '/30 ' + SUBSTRING(Radius_AdslIp.Route, 10, Charindex(' ', Radius_AdslIp.Route) - 10) + ' 1' 
WHEN Radius_AdslIp.TotalIp = 16
THEN Radius_AdslIP.Ipadd + '/28 ' + SUBSTRING(Radius_AdslIp.Route, 10, Charindex(' ', Radius_AdslIp.Route) - 10) + ' 1'
END, AVPair = 
CASE WHEN Radius_AdslUser.bandcap IS NULL 
THEN NULL 
ELSE 'throttle=' + Radius_AdslUser.bandcap 
END, Radius_AdslIp.Subnet
FROM Radius_AdslUser,Radius_AdslIp
WHERE Username = 'username@test.tld'
AND Suspended = 0
AND Radius_AdslUser.IpAddId = Radius_AdslIp.IpAddId

Который дает следующий результат:

Password    IpAdd           Route                               AVPair  Subnet
kmbjdatr    10.0.0.1        10.0.0.1/29 10.0.0.0 1              NULL    255.255.255.255

Формат таблиц следующий:

Radius_AdslIp

IpAddId IpAdd           Subnet          TotalIp UsableIp    Route                                   TypeId
944     10.0.0.1        255.255.255.255 8       6           ip:route=10.0.0.0 255.255.255.248       4

Radius_AdslUser

Username                    Password    IpAddId
username@test.tld           kmbjdatr    944

Я заменил CHARINDEX на LOCATE и использовал CONCAT, но мне не очень повезло.

Например:

WHEN Radius_AdslIp.TotalIp = 8 THEN Radius_AdslIp.Ipadd = CONCAT(Radius_AdslIp.Ipadd, '/29 ')

Форматы таблиц в MYSQL идентичны.

Любая помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 01 февраля 2012

Похоже, вы неправильно применяете функцию CONCAT. По сути, выражение SQL Server, подобное этому:

column_name + 'constant string' + function_call() + @variable

будет выглядеть так в MySQL:

CONCAT(column_name, 'constant string', function_call(), @variable)

Неправильная часть вашего отрывка выглядит как Radius_AdslIp.Ipadd = (та, что была до CONCAT). Не уверен, что вы имели в виду, но в любом случае это просто не нужно.

...