SQL从表中选择列,其中name ='一个带有2个或更多单词的语句'

时间:2017-02-03 16:08:30

标签: c# sql sql-server database

当我的查询是:

select * from table_name where name='jim'

一切都很好。

但是当我的查询是:

select * from table where ='a statement with 2 and more word'

例如此查询:

select columns from table where ='jim carrey'

查询只考虑了jim'。换句话说,查询只考虑第一个单词而不考虑之后的任何内容。

2 个答案:

答案 0 :(得分:1)

SQL不能那样工作。如果您采取以下三个查询:

public static String largestPalindromeInString(String in) {
    int right = in.length() - 1;
    int left = 0;
    char[] word = in.toCharArray();
    while (right > left && word[right] != word[left]) {
        right--;
    }
    int lenght = right + 1;
    while (right > left && word[right] == word[left]) {

        left++;
        right--;

    }
    if (0 >= right - left) {
        return new String(Arrays.copyOf(word, lenght ));
    } else {
        return largestPalindromeInString(
                new String(Arrays.copyOf(word, in.length() - 1)));
    }
}

如果我在我的SQL服务器数据库上运行这些(在更改回我们的真实数据结构之后),我将得到1个响应,第一个,实际命名为“Frank Jones”的人。我不会得到'Frank Jones III “

由于如果我运行第二个查询,名字和列号都在名称列中,我将得不到任何结果。

如果我运行第三个查询,我会得到每个人的名字,如果弗兰克但不会得到“杰森弗兰克斯”,因为我在我搜索的短语末尾只有一个通配符。如果我想要每个人都有弗兰克在他们名下的部分我会写这个查询:

select * from users where  name = 'Frank Jones'
select * from users where  name = 'Frank'
select * from users where name like 'Frank%'

这些是关于各种where子句的含义的标准规则,适用于我见过的每个数据库(尽管有些可能有不同的通配符)。

答案 1 :(得分:0)

  

你不会说你正在使用什么平台,这使得回答你的问题变得更难,但我会给出一个接近的答案。

您需要解析字符串中的第一个工作。所以

 SELECT aColumn 
 FROM aTable 
 WHERE name = LEFT('Jim Carrey', CHARINDEX('Jim Carrey',' '))

将是sql server

中的一个示例

每个平台的名称都会发生变化。