2012-02-01 54 views
1

我有一些真正的困难转换下面的MSSQL语句在MYSQL中产生相同的结果。MSSQL到MYSQL使用CASE然后当SUBSTRING&CHARINDEX

的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 = '[email protected]' 
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 
[email protected]   kmbjdatr 944 

我已经取代LOCATE CHARINDEX和已经使用CONCAT但我运气不好。

例如:在MYSQL

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

表格式是相同的。

任何帮助将不胜感激。

+0

“没有多少运气”究竟意味着什么?你会得到什么结果和/或错误?您是否尝试过编写一些非常简单的SELECT语句,以确保函数按照您的期望工作,然后再将所有内容放在一起? – Pondlife 2012-02-01 15:56:52

回答

0

好像你没有正确应用CONCAT功能。基本上,像这样的SQL Server表达式:

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

看起来像这样在MySQL:

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

在你的摘录的特定错误的部分似乎是Radius_AdslIp.Ipadd =(一CONCAT之前)。不知道你的意思是什么,但无论如何它只是不需要那里。