2016-12-14 5 views
0

У меня есть следующий запрос, и мне нужно добавить другое условие в поле «ON».
Если мне нужно включить другой пункт для «ON», который являетсяSQL-запрос - предложение «ON»

i_no = LEFT(replace(right(filename, charindex('\', reverse(filename))-1),'_rprt%[0-9]%.doc', ''), 

Как этого добиться?

SELECT (right(filename, charindex('\', reverse(filename))-1)) phyname, 
      replace(filename,(right(filename, charindex('\', reverse(filename))-1)), '') phypath, 
      a_no, 
      i_no 
     from 
      #tempimages 
     inner join 
      imagestatus 
     on 
      i_no = LEFT(replace(right(filename, charindex('\', reverse(filename))-1),'.doc', ''), 
        LEN(replace(right(filename, charindex('\', reverse(filename))-1),'.doc', ''))-3) 

ответ

1

Если вы хотите вернуть только записи, в которых оба условия в вашей статье ON являются истинными, а затем использовать AND:

SELECT (RIGHT(filename, CHARINDEX('\', REVERSE(filename))-1)) phyname, 
     REPLACE(filename,(RIGHT(filename, CHARINDEX('\', REVERSE(filename))-1)), '') phypath, 
     a_no, 
     i_no 
FROM #tempimages 
INNER JOIN imagestatus ON i_no = LEFT(REPLACE(right(filename, CHARINDEX('\', REVERSE(filename))-1),'.doc', ''),LEN(REPLACE(right(filename, CHARINDEX('\', REVERSE(filename))-1),'.doc', ''))-3) 
        AND i_no = LEFT(REPLACE(right(filename, CHARINDEX('\', REVERSE(filename))-1),'_rprt%[0-9]%.doc', '') 

Если записи должны быть возвращены, если либо из условий met, затем используйте OR:

SELECT (RIGHT(filename, CHARINDEX('\', REVERSE(filename))-1)) phyname, 
     REPLACE(filename,(RIGHT(filename, CHARINDEX('\', REVERSE(filename))-1)), '') phypath, 
     a_no, 
     i_no 
FROM #tempimages 
INNER JOIN imagestatus ON i_no = LEFT(REPLACE(right(filename, CHARINDEX('\', REVERSE(filename))-1),'.doc', ''),LEN(REPLACE(right(filename, CHARINDEX('\', REVERSE(filename))-1),'.doc', ''))-3) 
         OR i_no = LEFT(REPLACE(right(filename, CHARINDEX('\', REVERSE(filename))-1),'_rprt%[0-9]%.doc', '') 
+0

спасибо, как мне обращаться, если ошибка возникает с недопустимым l параметр ength, переданный влево или подстрока –

+0

Вызов функций не завершен - где вы вызываете 'LEFT', ваше выражение прекращается до того, как будет указан второй параметр (для количества возвращаемых символов). Изменить на: 'LEFT (заменить (right (filename, charindex ('\', reverse (filename)) - 1), '_ rprt% [0-9]%. Doc', ''), 2)' и заменить '2' в конце с любым количеством символов, которые вы ищете. – 3N1GM4

+0

filenamepath is = '\\ aa \ bb \ cc \ 00121.doc' или мой путь к filename может быть '\\ aa \ bb \ cc \ 00121_rprt001.doc' Поэтому мне нужно извлечь имена файлов для этих двух форматов файлов (путей) @rprtdelimeter = '_ rprt' right (Left (fileName, CHARINDEX (@ rprtdelimeter, fileName) -1), charindex ('\', reverse (Left (имя_файла, CHARINDEX (@ rprtdelimeter, @ fileName) -1))) -1) –