【问题标题】:SQL Server REPLACE()SQL Server 替换()
【发布时间】:2021-04-28 13:51:16
【问题描述】:

如果我在 SQL Server 中有一个动态查询,其中包含列名变量first_namelast_nameref_IDorder_IDpost_code_ID 我如何替换所有后缀为@987654328 的值@ 具有相同的字符串,例如 look_up_value

期望的输出是

first_name, last_name, look_up_value, look_up_value, look_up_value

目前有SELECT REPLACE(@Var, '_ID', 'look_up_value'),但这显然会留下列的前缀。

谢谢

DECLARE @SQL NVARCHAR(MAX)
DECLARE @Fields NVARCHAR(MAX)      
DECLARE @Fields2 NVARCHAR(MAX)                         
DECLARE @Return NVARCHAR(MAX) = Char(13)                                        
                              
SET @Fields = ''

SELECT @Fields = @Fields + Column_name + ',' + @Return
FROM Orders.INFORMATION_SCHEMA.columns 
WHERE TABLE_NAME = 'Recent_Orders'

SELECT @Fields = LEFT(@Fields, (LEN(@Fields) - 2))

SELECT REPLACE(@Fields, '_ID', 'look_up_value')

【问题讨论】:

  • 向我们展示完整的代码是什么,而不是不完整的sn-p。
  • 你从哪里得到这些列名?来自sys.columns的动态SQL生成?
  • INFORMATION_SCHEMA.columns
  • 请注意,您需要搜索'_ID,',而不是'_ID',才能仅查找后缀。 ('THE_IDES_OF_MARCH' 不应该匹配。)在 select 中使用 case 表达式来组合列表以即时替换各个名称而不是组合字符串然后尝试修复会更容易它。推荐阅读:String_Agg.
  • 仅供参考:String_Agg 已添加到 SQL Server 2017 中。迁移到受支持版本的另一个理由。

标签: sql-server tsql sql-server-2008


【解决方案1】:
....    
SELECT @Fields = @Fields + case when Column_name like '%[_]ID' then 'look_up_value' else Column_name end + ',' + @Return
....

【讨论】:

    猜你喜欢
    • 2022-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-30
    • 2016-07-11
    • 2021-12-07
    相关资源
    最近更新 更多