将 mysql 查询转换为 MS SQL

Posted

技术标签:

【中文标题】将 mysql 查询转换为 MS SQL【英文标题】:Converting mysql query to MS SQL 【发布时间】:2015-02-26 08:08:37 【问题描述】:

您好我想知道是否有人可以帮助我,我有以下 mysql 查询(摘录):

concat_ws('\n', 
                    IF(LENGTH(PafAddress.line1),PafAddress.line1,NULL),
                    IF(LENGTH(PafAddress.line2),PafAddress.line2,NULL),
                    IF(LENGTH(PafAddress.line3),PafAddress.line3,NULL),
                    IF(LENGTH(PafAddress.line4),PafAddress.line4,NULL),
                    IF(LENGTH(PafAddress.Line5),PafAddress.line5,NULL),
                    IF(LENGTH(PafAddress.post_town),PafAddress.post_town,NULL),
                    IF(LENGTH(PafAddress.county),PafAddress.county,NULL),
                    IF(LENGTH(PafAddress.postcode),PafAddress.postcode,NULL)
) AS AddressLabel

它从另一个表中获取多个地址字段并将其放入 memofield 格式,带有换行符,并删除空地址行。

在 MySQL 中完美运行。

我现在正试图在一个由 MS Access 运行的 php 网站上实现它(不是我的选择!),它不喜欢这种语法。

我不是 MS Access 专家,如果有人告诉我如何在 Access SQL 中实现这一点,我将不胜感激。

【问题讨论】:

请阅读:***.com/help/how-to-ask。现在,你尝试了什么?您访问了 Google 上的哪些链接? 【参考方案1】:

尝试使用 IIF(condition, truevalue, falsevalue) 语句。此外,您可以使用 &

连接

这里有两个参考资料供您参考: article about using IIF 和 article about concatenating using & 和 article about len() instead of length()

所以你的代码可能看起来像这样:

IIF(Len(PafAddress.line1)>0,PafAddress.line1,"") & " " &
IIF(Len(PafAddress.line2)>0,PafAddress.line2,"") & " " &
IIF(Len(PafAddress.line3)>0,PafAddress.line3,"") & " " &
IIF(Len(PafAddress.line4)>0,PafAddress.line4,"") & " " &
IIF(Len(PafAddress.Line5)>0,PafAddress.line5,"") & " " &
IIF(Len(PafAddress.post_town)>0,PafAddress.post_town,"") & " " &
IIF(Len(PafAddress.county)>0,PafAddress.county,"") & " " &
IIF(Len(PafAddress.postcode)>0,PafAddress.postcode,"") 
AS AddressLabel

要跳过空记录,请尝试使用:

iif( Len(PafAddress.line1)>0 
     OR Len(PafAddress.line2)>0
     OR Len(PafAddress.line3)>0
     OR Len(PafAddress.line4)>0
     OR Len(PafAddress.line5)>0
     OR Len(PafAddress.post_town)>0
     OR Len(PafAddress.county)>0
     OR Len(PafAddress.postcode)>0 
,
IIF(Len(PafAddress.line1)>0,PafAddress.line1,"") & " " &
IIF(Len(PafAddress.line2)>0,PafAddress.line2,"") & " " &
IIF(Len(PafAddress.line3)>0,PafAddress.line3,"") & " " &
IIF(Len(PafAddress.line4)>0,PafAddress.line4,"") & " " &
IIF(Len(PafAddress.Line5)>0,PafAddress.line5,"") & " " &
IIF(Len(PafAddress.post_town)>0,PafAddress.post_town,"") & " " &
IIF(Len(PafAddress.county)>0,PafAddress.county,"") & " " &
IIF(Len(PafAddress.postcode)>0,PafAddress.postcode,"" & char(13) & char(10) )
,"") 
AS AddressLabel

在这个查询中,(1st) 检查任何值的长度是否大于 0...如果是,则输出带有 CRLF 的地址行;否则输出一个空字符串。

【讨论】:

非常感谢,但没有在每行之后引入换行符? @Jonathan Green 尝试在访问查询中想要换行的任何地方添加“& Chr(13) & Chr(10)”。 additional info link @Jonathan Green 我不确定你的意思。也许您指的是空记录。如果所有字段都为空,则返回的值将为空,除了语句中的 & " " & 部分添加的空格。因此,您可以使用 trim() 函数: trim(iif(len(PafAd.......postcode,"")) 作为 AddressLabel。然后您可以将其包装在 iif 语句中。我将编辑我的答案发布以包含此内容。

以上是关于将 mysql 查询转换为 MS SQL的主要内容,如果未能解决你的问题,请参考以下文章

如何将 MS-SQL Server SELECT 查询转换/迁移到 Oracle 和 MySQL?

MS Access 查询转换为 Sql Server

如何将选择 sql 查询的结果转换为 ms 访问中的新表

将 PostgreSql 时间戳查询转换为 MS SQL/Azure SQL

如何将 MS Access“IIF”查询转换为 Sql Server 查询?

无法将 MS Sql 查询转换为 Hibernate @Query