2015-06-19 83 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版本是什麼嗎? –