2015-06-19 86 views
-2

我想写我认为会是一个简单的where子句。 FULLNAME字符串的格式如下(“Doe,John”),因此是where子句和concat函数。Where子句concat用逗号

下面是该查询:

SELECT * 
    FROM table 
    WHERE concat(LAST_NM, ', ', FIRST_NM) = FULLNAME; 

查询失败,出现以下错误:

Error Executing Database Query. [Macromedia][SQLServer JDBC Driver] [SQLServer]Incorrect syntax near ','.

+2

将您的concat语句添加到您的select中,查看结果的样子。你收到什么错误? – Andrew

+7

mysql或sql-server,它是哪一个?他们是不同的。 –

+1

如果有的话,concat返回null;你可能需要使用ifnull语法来避免这种情况 – Nikki9696

回答

0

是您的全名类似 “李四,约翰”?
您的FullName是否完整?

如果不是

SELECT * 
FROM table 
WHERE concat(LAST_NM, ', ', FIRST_NM) like ('%' + FULLNAME + '%') 
+0

是的,全名格式如同 – JET1991

0

虽然我没有看到任何问题与您的查询,我想提出一个方法来解决,通过努力找到,如果它是导致CONCAT功能的特定原始值打破。

这个想法是遍历打印每个值的原始数据,以便您知道哪一个(如果有的话)会失败,并且从下一步开始可能会更容易。

--Copy your table data to a temporary table 
--E.g. 
SELECT * 
into #table 
FROM  
(
    select 'Doe' as LAST_NM , 'Jhon' as FIRST_NM 
     union 
    select 'Ryan' as LAST_NM , 'Jack' as FIRST_NM 
     union 
    select 'Dylan' as LAST_NM , 'Bob' as FIRST_NM 
) a 

--Iterate through the rows to see which one causes the issue 
DECLARE @I INT = 1 
DECLARE @TableCount INT = (select count(*) from #table) 
DECLARE @FN varchar(100) 
DECLARE @LN varchar(100) 

WHILE @I <= @TableCount 
BEGIN 
    SET @FN = (select Top 1 FIRST_NM from #table) 
    SET @LN = (select Top 1 LAST_NM from #table) 
    print(@I) 
    print(@FN) 
    print(@LN) 
    print('------------------') 
    delete top (1) from #table 
    SET @I = @I + 1 
END 
+0

谢谢,这有助于很多。我最终不得不用子查询去得到我需要的结果! – JET1991

+0

'所以你会知道哪一个(如果有的话)失败了' - 虽然失败了什么?这个问题是一个句法错误,根据所提供的信息,它不可能与数据有任何关系。 @ JET1991虽然现在可能无关紧要,你能告诉我你使用的SQL Server版本是什么吗? –