【问题标题】:What is the faster way to execute the query rather than Replace () in SQL Server在 SQL Server 中执行查询而不是 Replace() 的更快方法是什么
【发布时间】:2021-08-28 21:06:20
【问题描述】:

我正在尝试替换列中的几个字符串并将它们添加到新列中。但是,查询处理时间太慢了,我也觉得“喜欢”让它变得更慢。有没有其他替代方法可以减少处理时间?这是我当前的代码:

SELECT TOP 10 
    *,
    REPLACE(REPLACE(REPLACE(REPLACE
        (REPLACE(_NAME,'Test.S103.S103.SVs.Nozzle1.si_InTemp1','Temp1'),
    'Test.S103.S103.SVs.Nozzle1.si_InTemp2','Temp2'),
    'Test.S103.S103.SVs.Nozzle1.si_InTemp3','Temp3'),
    'Test.S103.S103.SVs.Nozzle1.si_InTemp4','Temp4'),
    'Test.S103.S103.SVs.Nozzle1.si_InTemp5','Temp5') As 'temperature_test'
FROM 
    [MGBAIS].[dbo].[Temperature]
WHERE  
    _NAME LIKE '%Test%'
ORDER BY 
    _TIMESTAMP DESC

【问题讨论】:

  • 为什么不直接将 'Test.S103.S103.SVs.Nozzle1.si_In' 替换为空白?
  • 空白是什么意思?我需要将其替换为特定值,例如“test1”,因为原始列包含一个长字符串
  • 在您的示例中,您将 *Temp1 替换为 Temp1,将 *Temp2 替换为 Temp2 等等。这不是你的实际要求吗?
  • Shree.Pat18 试图向您展示的是,您向我们展示的每个案例都在用其他东西替换“Test.S103.S103.SVs.Nozzle1.si_In”,然后是其他东西.您可以通过将所有那些 Replace 函数替换为表示 Replace(_Name,'Test.S103.S103.SVs.Nozzle1.si_In','') 的 ONE 来大大简化此示例
  • 似乎每个人都在关注 REPLACE - 你有一些很好的建议。至于性能,您正在寻找其中包含“test”的任何字符串 - 但您只是替换字符串以 test 开头的位置。所以 - 更改为:LIKE 'Test.%' - 如果你在该列上有一个索引,它应该表现得更好。

标签: sql sql-server replace


【解决方案1】:

只是一个选项...您可以使用STUFF()

示例

 Declare @S varchar(max) = 'Test.S103.S103.SVs.Nozzle1.si_InTemp1'
 Select stuff(@S,1,charindex('Temp',@S)-1,'')

结果

Temp1

如果是单数测试,也可以使用right()

 Declare @S varchar(max) = 'Test.S103.S103.SVs.Nozzle1.si_InTemp1'
 Select right(@S,5)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-10-28
    • 2015-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多