2017-12-26 55 views
0

여부에 따라 두 개의 열 사이의 선택 : 나는 새 열을 추가 할 필요가테라 데이타는 - 그것은 숫자로 시작하거나 I과 유사한 보이는 쿼리하지

SELECT 
    s.cola, s.colb, t.colc, t.cold, u.cole, u.colf, u.colg, u.colh, u.coli, u.colj, u.colk, u.coll 
FROM table1 s 
INNER JOIN table2 t 
    ON s.colb = t.colc 
INNER JOIN table3 u 
    ON u.colm = t.cold 
WHERE cast(s.cola as date) between date '2017-11-06' and date '2017-11-10' 
ORDER BY 3 

는에 인 col_new라고 u.colm 또는 u.coln으로 채워야합니다. 해당 열이 숫자로 시작하면이 열의 값은 u.colm입니다. 그렇지 않은 경우 값은 u.coln입니다. 테이블 u의 각 항목에 대해 u.coln 또는 u.colm이 숫자로 시작하는 것으로 알려져 있습니다. Syntax error: expected something between '(' and the 'substring' keyword.

이 친절하게 해결책을 제안한다

SELECT CASE WHEN ISNUMERIC(SUBSTRING(LTRIM(colm), 1, 1)) = 1 
     THEN 'yes' 
     ELSE 'no' 
     END AS col_new 
FROM table_u 

그것은 오류를 반환

나는 숫자로 시작하는 항목이 확인 여부를 할 수 있는지 테스트하기 위해 다음 쿼리를 시도했다.

편집 : 정확한 오류 :

SELECT (CASE WHEN LEFT(LTRIM(colm), 1) BETWEEN '0' AND '9' THEN 'yes' 
      ELSE 'no' 
     END) AS col_new 
FROM table_u; 

LEFT() 문자열의 첫 번째 "N"문자 편리한 속기 :

[Teradata Database] [3706] Syntax error: expected something between '(' and the 'substring' keyword. 
+0

정확한 오류를 표시 할 수 있습니까? 귀하의 구문을 올바르게 보인다. –

+0

또한 숫자로 시작하는 경우 대신 'LEFT'를 사용해보십시오. 'ISNUMERIC (LEFT (LTRIM (colm), 1)) = 1' –

+0

Teradata에서 정확한 오류 메시지를 추가했습니다. –

답변

1

대신 isnumeric(), 단지 비교를 .