sql - 根据模式更新和替换字符串值

标签 sql sql-server sql-server-2008

我面临一个复杂的 sql 更新案例,我不知道如何解决。

我有 nvarchar(32) 类型的列,它由诸如“952683174”之类的数字组成。我确实需要根据以下规则替换它的字符串:

  • 1 替换为 3
  • 2 替换为 5
  • 3 替换为 4
  • 4 替换为 1
  • 5 替换为 9
  • 6 替换为 8
  • 7 替换为 2
  • 8 替换为 3
  • 9 替换为 6

因此对表执行更新查询后,之前的列值“952683174”将变为“695834321”。

最佳答案

可以先将每个数字替换成另一个字符,然后再将字符替换成对应的数字,如下所示:

DECLARE @number nvarchar(32) = '952683174';

SELECT
REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(
REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(
@number,
'1', 'A'),'2', 'B'),'3', 'C'),'4', 'D'),'5', 'E'),'6', 'F'),'7', 'G'),'8', 'H'),'9', 'I'),
'A', '3'),'B', '5'),'C', '4'),'D', '1'),'E', '9'),'F', '8'),'G', '2'),'H', '3'),'I', '6')

Demo

关于sql - 根据模式更新和替换字符串值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50112830/

相关文章:

mysql - 如果字符串太长则运行 CONCAT()

javascript - 连接 JavaScript 和 Ms Sql

sql - 如何将多个 SQL 查询求和在一起?

c# - 我如何建模这个关系数据库,并将所有数据放在集合类中

sql-server-2008 - 如何在 SQL Server 2008 中使用没有用户名和密码的 `sqlcmd` 命令?

c# - 将整数列表从 C# 传递到 Oracle 存储过程

java - JPA 标准查询 : writing query with array operators

mysql - 如何拆分字符串标记并在 mysql 中对它们进行计数?

SQL Server 删除并重新创建表的索引

sql-server-2008 - "select 1 from"有什么作用?