我有一张表格如下:
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')
有更好的方法吗?
答案 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);