【问题标题】:How do I concat strings from different columns and search using this expression如何连接来自不同列的字符串并使用此表达式进行搜索
【发布时间】:2014-12-08 08:15:40
【问题描述】:

我有很多值,比如 '1@1@15' 我需要为 DB(legasy FoxPro)请求构建 sql,如下所示:

SELECT        ba1 AS mest, bd1 AS Ukpg, be1 AS well, be12 AS probur, be13 AS iskust, be6 AS burDate
FROM            ksmest
WHERE        ((ba1 + '@' + bd1 + '@' + be1) IN ('1@1@15', '3@1@15'))

ba1、bd1 和 be1 是数字(不是字符串)。

如您所见,我需要连接来自不同列的字符串并使用此表达式进行搜索。我的要求无效,它只是一个样本。 有没有可能解决?或者可能是其他方式?

【问题讨论】:

    标签: sql oledb visual-foxpro oledbcommand


    【解决方案1】:

    您可以在 SELECT 语句中将相关列组合成一个聚合字段,在此过程中将它们转换为字符串 - 请参见本示例中的“mycolumn”。此外,您的语法看起来更像 T-SQL,对于 VFP,您将使用 INLIST()

    select ;
       ba1 AS mest, bd1 AS Ukpg, be1 AS well, be12 AS probur, be13 AS iskust, be6 AS burDate ;
       alltrim(str(ba1, 12, 0)) + "@" + alltrim(str(bd1, 12, 0)) ;
            + "@" + alltrim(str(be1, 12, 0)) as mycolumn;
    from ksmest ;
    where inlist(mycolumn, "1@1@15", "3@1@15")
    

    【讨论】:

    • 一些解释会很好。
    • 我自己找到了解决方案,但感谢您的回答!我的方法工作得更慢:SELECT LTRIM(STR(ba1)) + '@' + LTRIM(STR(bd1)) + '@' + LTRIM(STR(be1)) AS wid, be12 AS probur, be13 AS iskust, be6 AS burDate FROM ksmest WHERE ((ALLTRIM(STR(ba1)) + '@' + ALLTRIM(STR(bd1)) + '@' + ALLTRIM(STR(be1))) IN ('1@1@117', '1@1@141', '1@2@206') 实际上wid 字段在最后一个符号后有很多空格,ALLTRIM 帮不上忙 :)
    • 只要 bd1 和 ba1 和 be1 是整数,或者你不介意你的 wid 可能是 "123.00@456.23@192.98" 或类似的,这将起作用。
    • 您可以使用 TRANSFORM() 而不是 LTRIM(STR())。我觉得会快一点。
    猜你喜欢
    • 1970-01-01
    • 2012-05-19
    • 1970-01-01
    • 1970-01-01
    • 2022-06-11
    • 2011-09-23
    • 1970-01-01
    • 2012-05-26
    • 1970-01-01
    相关资源
    最近更新 更多