获取大于3个数字或字母的值的行

时间:2018-12-04 13:19:15

标签: sql sql-server

我试图提出一个查询,在该查询中我可以返回值,其中字母之间的距离对于所选字母可以为一个或多个。

例如:

我有两列,在 A列 B列中都有字母。当 B列的距离大于 A列一个或多个字母时,我想返回行。

4 个答案:

答案 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;