sql server中字符串的反向补码

c3frrgcw  于 2021-08-09  发布在  Java
关注(0)|答案(3)|浏览(255)

这个 reverse complement 一个dna序列的一部分是通过交换字母形成的 AT , CG (反之亦然)作为第一步,然后反转整个语法顺序。例如 reverse acctgag是gagtcca(简单地从末尾到开头读取序列),而 reverse complement 是ctcaggt(通过先交换字母,然后反转结果序列)。
我怎样才能达到预期的目标 reverse complement sql server中的输出?为了方便起见,我提供了以下sql代码。

DECLARE @seq NVARCHAR(MAX)
SET @seq = 'ACCTGAG'

SELECT @seq AS [Sequence], REVERSE(@seq) AS [Reverse sequence]

---output---
Sequence    Reverse sequence
ACCTGAG     GAGTCCA

---Desired output---
CTCAGGT
tkqqtvp1

tkqqtvp11#

你可以很容易地做到这一点 TRANSLATE 以及 REVERSE :

DECLARE @YourString varchar(20);

SET @YourString = 'ACCTGAG';

SELECT REVERSE(TRANSLATE(@YourString,'ACTG','TGAC'));
``` `TRANSLATE` 将第二个参数中的每个字符替换为第三个参数中相同序号位置的字符。因此,对于上述情况, `A` 将被替换为 `T` ,  `C` 与 `G` ,  `T` 与 `A` 以及 `G` 以及 `C` .
同样重要的是,它只处理每个字符一次,这意味着(例如)一个字符从 `A` 至 `T` ,以后不会翻译回 `A` 在上面的表达式中。嵌套的 `REPLACE` 但是,函数会遇到这个问题,因此必须先用任意字符替换某些函数,然后在最后正确替换它们。
nkkqxpd9

nkkqxpd92#

听起来你可以用 replace() 几次 reverse() :

select @seq,
       reverse(replace(replace(replace(replace(replace(replace(replace(replace(@seq, 'A', 'B'
                                                                          ), 'T', 'U'
                                                                  ), 'C', 'D'
                                                          ), 'G', 'H'
                                                  ), 'B', 'T'
                                          ), 'U', 'A'
                                  ), 'D', 'G'
                          ), 'H', 'C'
                   )
          )

这是一把小提琴。
这将用任意字母替换基,然后将它们放回相反的值。

kuhbmx9i

kuhbmx9i3#

你可以试试 TRANSLATE 考虑到你正在使用 SQL Server 2017 ```
DECLARE @seq NVARCHAR(MAX)
SET @seq = 'ACCTGAG'

SELECT @seq AS [Sequence], REVERSE(@seq) AS [Reverse sequence]

SELECT REVERSE(TRANSLATE(TRANSLATE(@seq,'A','T'), 'C', 'G')) AS Translated

尽管我同意拉鲁在上面的评论。你的逻辑是 `GTGTGGT` . 除非我们误解了你的要求

相关问题