SQL连接字符串?

时间:2009-04-22 19:41:11

标签: sql sql-server

我有一个查询,它从最终用户那里获取输入,并将其分别与2列进行比较,并将两列连接起来。

SELECT f_name, l_name, (f_name + ' ' + l_name) AS full_name
FROM users_table
WHERE f_name = user-input
   OR l_name = user-input
   OR 'full_name' = user-input

请原谅大量语法失败,但我保证在程序中它是正确的。

它是用PHP编写的,查询SQL SERVER 2005数据库,并且不区分大小写。

键入一个名称(第一个或最后一个)将返回正确的结果,但首先输入,然后输入空格,然后输入最后一个,返回一个空集。

有什么想法吗?

8 个答案:

答案 0 :(得分:11)

这是因为'full_name'是文字而不是列名,它在WHERE子句级别不存在

你需要添加

OR f_name + ' ' + l_name = user-input
而不是 或'full_name'=用户输入

答案 1 :(得分:5)

根据“教人钓鱼”理论......

您不能在where或group by子句中使用列别名。您可以在order by子句中使用它。要按照您希望的方式使用列别名,您必须执行类似......

的操作
SELECT [Full Name] FROM
  (SELECT f_name, l_name, f_name + ' ' + l_name AS [Full Name]
   FROM users_table)
  WHERE [Full_Name] = @paramVal

答案 2 :(得分:2)

'full_name'是一个文字字符串而不是列...

(f_name +''+ l_name)=用户输入

答案 3 :(得分:2)

尝试:

SELECT f_name, 
       l_name, 
       (f_name + ' ' + l_name) AS full_name
FROM users_table
WHERE f_name = user-input
   OR l_name = user-input
   OR f_name + ' ' + l_name = user-input

答案 4 :(得分:1)

对于初学者,请删除最后一个条件中full_name周围的单引号。现在将用户输入与字符串文字'full_name'进行比较。

连接部分应该是好的!

答案 5 :(得分:1)

问题出在这一行:

OR 'full_name' = user-input

如果实际上是你写下来的,那么你将文字字符串“full_name”与提供的输入进行比较。在单词周围加上单引号将其视为文字。请尝试以下方法:

SELECT f_name, l_name, (f_name + ' ' + l_name) AS full_name
FROM users_table
   WHERE f_name = user-input
   OR l_name = user-input
   OR full_name = user-input

答案 6 :(得分:1)

这将有效:

SELECT *
FROM users_table
WHERE CONCAT(first_name,' ',last_name) = user-input;

答案 7 :(得分:0)

确保用户输入“full_name”(不带引号)作为用户输入,数据库将返回一些行。