【问题标题】:SQL Server : 'Case When' Statement to Replace Strings With Other Strings Not WorkingSQL Server:用其他字符串替换字符串的“Case When”语句不起作用
【发布时间】:2017-12-02 01:28:12
【问题描述】:

下面是我目前正在运行的 T-SQL 代码。我的目标是用其他字符串替换RRR 列中的某些字符串。

代码执行,但字符串没有被替换。原始字符串值仍在数据中。

SELECT 
    *, 
    CASE 
       WHEN [RRR] = 'A' THEN 'Apple'   
       WHEN [RRR] = 'A-9' THEN 'A9'
       WHEN [RRR] = 'BASE' THEN 'B'
       WHEN [RRR] = 'CHECK' THEN 'B'
       ELSE [RRR]
    END AS CleanDataAMES4 
INTO #df_ERA4_a_temp
FROM #df_ERA4_a

【问题讨论】:

  • 比较字符串是否完全相同(例如,大小写?)
  • 只是检查“原始数据”是 RRR 列(因为 *)还是 cleandataAMES4 列?
  • 原始列是RRR

标签: sql-server string replace case


【解决方案1】:
CREATE TABLE test (id INT IDENTITY(1,1), RRR TEXT);
INSERT INTO test (RRR) VALUES ('A'),('B'),('C'),('A-9'),('BASE'),('CHECK');

SELECT *,
CASE 
   WHEN RRR LIKE 'A' THEN 'Apple'   
   WHEN RRR LIKE 'A-9' THEN 'A9'
   WHEN RRR LIKE 'BASE' THEN 'B'
   WHEN RRR LIKE 'CHECK' THEN 'B'
   ELSE RRR
   END AS CleanDataAMES4
FROM test;

使用“喜欢”而不是“=”。

您的问题是“=”运算符。我认为错误消息“数据类型 TEXT 和 VARCHAR 在等于运算符中不兼容。”不显示,因为它出现在您的 CASE 语句中。 Look at this question.

你可以在sqlfidde试试这个

【讨论】:

  • 但是,如果它没有解决您的问题,您为什么还要接受我的回答呢?
  • 我明白了。对你有益。以防万一你想深入研究这个问题。您应该研究如何比较 MSSQL 中的文本。 MSSQL 中还有多种“文本”类型,因此您最终也必须使用强制类型转换。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-09-12
  • 2013-09-22
  • 2017-01-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-21
相关资源
最近更新 更多