【问题标题】:How to add a separator when accessing two different fields from different tables in SQLSQL中不同表访问两个不同字段时如何添加分隔符
【发布时间】:2021-05-26 09:47:27
【问题描述】:
DECLARE @test1 varchar = 'This is test 1';
DECLARE @test2 varchar = 'This is test 2';

SELECT 
        'Expected output' = isnull(@test1, '') + '. ' +  isnull(@test2, '')

预期的输出应该是“这是测试 1。这是测试 2”。但如果@test1 中没有任何内容,则不要显示“.”分隔符。

希望有人能帮帮我。

【问题讨论】:

    标签: sql sql-server stored-procedures


    【解决方案1】:

    如果您使用的是最新版本的 SQL Server,只需使用 CONCAT_WS

    DECLARE @test1 varchar(30) = 'This is test 1'; --Always define your length, precision and scale!
    DECLARE @test2 varchar(30) = 'This is test 2'; --Always define your length, precision and scale!
    /*
    {'Literal String Alias' = Expression} is deprecated! Don't use it.
    Don't, however, use literal strings for aliases at all, it is confusing.
    Ideally, don't use object names/aliases that require delimit identification.
    If you must use the T-SQL ([]) or ANSI (") delimit identifiers.
    */
    SELECT CONCAT_WS('.',@test1, @test2) AS ExpectedResult;
    

    如果您使用的是旧版本的 SQL Server,请在每个值的开头添加分隔符前缀,并使用 STUFF 删除第一个:

    DECLARE @test1 varchar(30) = 'This is test 1'; --Always define your length, precision and scale!
    DECLARE @test2 varchar(30) = 'This is test 2'; --Always define your length, precision and scale!
    
    SELECT STUFF(CONCAT('.' + @test1,'.' + @test2),1,1,'') AS ExpectedResult;
    

    【讨论】:

    • 谢谢。但是 Concat_ws 不被识别为内置函数。我正在使用 microsoft sql server management studio 2018
    • “Concat_ws 但是不被识别为内置函数” 这就是为什么我说如果您使用的是 最近 版本的 SQL Server , @saafiyah ,然后继续提供适用于旧版本的解决方案。那里有2个解决方案;后者将适用于您正在使用的旧版本。但是,没有 SSMS 2018;有 SSMS 版本 18,但它支持 SQL Server 2008 - 2019,所以并没有告诉我你正在使用什么版本的 SQL Server。
    • 谢谢大家,我最终在 CASE 中使用了 STUFF 函数,基本上检查 '@test1' 是否为空,然后将其设置为空,并与 @test2 相同以避免尾随 '. ' 当 '@test1' 为空时。
    【解决方案2】:

    如果@test1 中没有任何内容,则不要显示“.”分隔符。

    也许最简单的方法是:

    SELECT CONCAT(@test1 + '. ', @test2)
    

    CONCAT() 忽略 NULL 值,但 + 不会。所以如果@test1NULL 那么第一个表达式是NULL 并被忽略。

    【讨论】:

    • @Larnu 。 . .我知道这一点。但是,这不是OP所要求的。我已经引用了问题的相关部分。
    • “我知道这一点。” 但 OP 不会。
    猜你喜欢
    • 2016-03-27
    • 2017-09-09
    • 2021-11-09
    • 1970-01-01
    • 2021-01-21
    • 2018-08-25
    • 2020-01-26
    • 1970-01-01
    • 2014-11-28
    相关资源
    最近更新 更多