在列

时间:2017-08-29 11:29:30

标签: sql sql-server

我有一张表格如下:

id      | flags
--------|------------
1       | ABC
2       | DEF
3       | ADF

我想交换字母A和F,以生成表格:

id      | flags
--------|------------
1       | FBC
2       | DEA
3       | FDA

我的直觉是使用3个单独的sql语句,“z”作为交换字符(因为flags列中不会有小写字符)。首先,我会REPLACE(flags, 'A', 'z'),然后REPLACE(flags, 'F', 'A'),然后是REPLACE(flags, 'z', 'F')

有更好的方法吗?

3 个答案:

答案 0 :(得分:1)

这取决于您的RDBMS是否配置为允许区分大小写?某些平台(如MS Sql Server)在安装期间默认为不区分大小写的排序规则。

你知道根本没有使用任何角色吗?您可以使用!之类的特殊字符或类似临时字符的字符,而不是z

我建议将整个更新脚本(所有3个语句)包装在一个事务中,您可以在成功时失败/提交时回滚。您还可以设置隔离级别,以便在更新过程中不会对temp标志值进行脏读。

答案 1 :(得分:1)

也许你可以这样做:

UPDATE table_name
SET flags = REPLACE(REPLACE(REPLACE(flags, 'A', '?'), 'F', 'A'), '?', 'F');

(我希望订单正确;-))

?替换为从未使用过的字母或符号。有些DBMS具有TRANSLATE功能,我认为是Oracle和SQL Server。也许这对你有用。

答案 2 :(得分:1)

newThing.setVisible(true);

http://rextester.com/OZW89662