【问题标题】:Append Characters using built-in formula while column fetch in SQL Server在 SQL Server 中获取列时使用内置公式附加字符
【发布时间】:2015-05-12 12:58:43
【问题描述】:

我得到了一个场景,从给定的单元格中选择 4 个字符(最后 4 个)

我是使用 Case 表达式手动完成的。 我需要自动化它而不是使用 Cases

我已经做到了。

SELECT CASE WHEN LEN(ticket_number) >= 4 THEN
              'x' + RIGHT(ticket_number,4)
            WHEN LEN(ticket_number) = 3 THEN 
              'x0' + ticket_number
            WHEN LEN(ticket_number) = 2 THEN 
              'x00' + ticket_number
            WHEN LEN(ticket_number) = 1 THEN 
              'x000' + ticket_number
            ELSE
              ''
        END AS ticket_number
FROM tickets
WHERE ticket_number <> ''
ORDER BY date DESC

我需要优化这个查询。

【问题讨论】:

    标签: sql sql-server dml database-optimization


    【解决方案1】:

    你的意思是这样的?

    'x' + RIGHT('000'+ticket_number,4) AS ticket_number
    

    如果我硬编码一个 2 个字符的值:

    SELECT 'x' + RIGHT('000'+'12',4) AS ticket_number
    

    我明白了:

    x0012
    

    所以这个解决方案绝对有效。

    【讨论】:

    • 我认为你不需要截断票号(假设他的CASE很全面,并且ticket_number最大长度为4)。外面的 RIGHT 应该够用了。
    • 再想一想,你是对的。即使ticket_number超过4个字符,外面的RIGHT就足够了。
    • ticket_number 长度小于 4 时不起作用。
    • @Tab Alleman 谢谢,我在那里使用相同的长度条件。谢谢我已经做到了。
    【解决方案2】:

    从刻度中选择 tic + REPLICATE(0,4-len(tic))

    【讨论】:

    • 即使是简单答案的描述通常也会使它们更有用,并且通常更受欢迎。
    猜你喜欢
    • 1970-01-01
    • 2012-09-19
    • 2016-11-12
    • 2020-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多