2015-06-19 3 views
-2

Я пытаюсь написать то, что, как я думал, было бы простым предложением where. Строка FULLNAME отформатирована следующим образом («Doe, John»), следовательно, предложение where и concat.Где предложение 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 к вашему выбору, посмотрите, как выглядят результаты. И какая ошибка вы получаете? – Andrew

+7

mysql или sql-server, какой он? Они разные. –

+1

concat возвращает null, если таковые имеют значение null; вам может понадобиться использовать ifnull синтаксис, чтобы избежать этого – Nikki9696

ответ

0

Ваш ПолноеИмя что-то вроде "Doe, Джон"?
Ваше полное имя 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 вы используете? –

Смежные вопросы