【问题标题】:MSSQL to MYSQL using CASE WHEN THEN SUBSTRING & CHARINDEXMSSQL 到 MYSQL 使用 CASE WHEN THEN SUBSTRING & CHARINDEX
【发布时间】:2012-02-24 03:18:33
【问题描述】:

我在转换下面的 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 中的表格格式是相同的。

任何帮助将不胜感激。

【问题讨论】:

  • “运气不好”到底是什么意思?你得到什么结果和/或错误?在将所有内容放在一起之前,您是否尝试过编写一些非常简单的 SELECT 语句来确保函数按预期工作?

标签: mysql sql-server substring case concat


【解决方案1】:

您似乎没有正确应用CONCAT 函数。基本上,像这样的 SQL Server 表达式:

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

在 MySQL 中应该是这样的:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-07
    • 2020-11-14
    • 1970-01-01
    • 2022-11-30
    • 1970-01-01
    相关资源
    最近更新 更多