2017-12-26 26 views
0

かどうかに基づいて、2つの列の間の選択:、私は新しい列を追加する必要がTeradataのは - それは数字で始まるか、私はに似たクエリはありませ

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のいずれかが数字で始まることがわかっています。番号で始まるエントリが識別できるかどう

は、私がテストするために、次のクエリを試してみました:

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

それはエラーを返しました:Syntax error: expected something between '(' and the 'substring' keyword.

は親切に解決策を提案します。

編集: 正確なエラー:

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()、単に比較を行います。

関連する問題