我试图提出一个查询,在该查询中我可以返回值,其中字母之间的距离对于所选字母可以为一个或多个。
例如:
我有两列,在 A列和 B列中都有字母。当 B列的距离大于 A列一个或多个字母时,我想返回行。
答案 0 :(得分:1)
我不清楚,当您说“更大”是指任何两个字母之间的距离是2或3(B列可以按字母顺序在A列之前或之后,相隔2或3)。 。或者如果B列必须在A列之后按字母顺序排列,则距离应为2或3
由于我不确定您在说什么,因此我提出了两种选择。阅读“如果”规则,然后选择适合您情况的规则,然后使用其下的查询:
如果columnA为D
,并且columnB可以为A B F G
SELECT * FROM table WHERE ABS(ASCII(columna) - ASCII(columnb)) IN (2,3)
如果columnA为D
,并且columnB可以为F G
SELECT * FROM table WHERE ASCII(columnb) - ASCII(columna) IN (2,3)
编辑1::在您以后的评论中,您现在所说的距离不仅是2或3个字母(问题的第一行表示“ 2或3”),还包括任意数量的字母距离等于或大于2:
SELECT * FROM table WHERE ASCII(columnb) - ASCII(columna) >= 2
总体而言,该技术与上述查询没有太大不同,并且有很多方法可以指定所需的内容:
SELECT * FROM table
WHERE
ASCII(columnb) - ASCII(columna)
BETWEEN <some_number_here> AND <other_number_here>
最终,最重要的是要注意ASCII函数的使用,它为我们提供了字符串中第一个字母的ascii字符代码:
ASCII('ABCD') => 65
如果到'A'的字母距离大于1等,我们可以对此进行数学计算。
可能还值得注意的是,ASCII()
适用于单字节ascii字符。如果您的数据是多字节(Unicode),则可能需要改用ORD()
:
Edit2 :您对问题的最新修改将限制修改为“ B比A大A大于B”,相当于>= 1
..
该问题似乎没有明确的规范,请将答案作为一般技术的指导:
--for an open ended distance, ascii chars
SELECT * FROM table WHERE ASCII(columnb) - ASCII(columna) >= <some_distance>
--for an open ended distance, unicode
SELECT * FROM table
WHERE ORD(columnb) - ORD(columna) >= <some_distance>
--for a definite range of distances (replace … appropriately)
SELECT * FROM table
WHERE ... BETWEEN <some_distance> AND <some_other_distance>
答案 1 :(得分:0)
这确实可以工作:
<div v-for="(item, index) in data" @click="remove(index)"></div>
答案 2 :(得分:0)
如果您需要精确地增加2或3个字母,则可以使用类似的内容
从表名中选择Column A,ColumnB,其中(2,3)中的ASCII(ColumnB)-ASCII(ColumnA)
如果您希望所有相差等于2以上的行,请使用
从表名称中选择Column A,ColumnB,其中ASCII(ColumnB)-ASCII(ColumnA)> = 2
答案 3 :(得分:0)
您可以在其中执行 ascii 。
select * from SampleTable where (ASCII(sampleTable.ColumnB) - ASCII(ColumnA)) >= 2;