【问题标题】:Converting mysql query to MS SQL将 mysql 查询转换为 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 中实现这一点,我将不胜感激。

【问题讨论】:

标签: php ms-access


【解决方案1】:

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

连接

这里有两个参考资料供您参考: article about using IIFarticle 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 语句中。我将编辑我的答案发布以包含此内容。
猜你喜欢
  • 2012-11-15
  • 2019-12-07
  • 2019-11-17
  • 1970-01-01
  • 1970-01-01
  • 2014-01-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多