2012-02-01 6 views
1

MYSQLで同じ結果を出すために、以下のMSSQL文を変換するのが本当に難しいです。MSSQLからMYSQLへSUBSTRINGとCHARINDEXの場合

次のようにMSSQLクエリは次のよう

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 

テーブルの形式である:以下の結果生成

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 

を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

答えて

0

CONCAT機能が正しく適用されていないようです。基本的には、このようなSQL Serverの式:

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

は、MySQLには次のようになります。

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

あなたの抜粋で、特定の間違った部分がRadius_AdslIp.Ipadd =CONCAT前のもの)のようです。あなたはそれが何を意味していたのかはっきりしていませんが、いずれにせよ、そこには必要ないだけです。

関連する問題