この質問は、私の前の質問 である文字列内の数字の位置の検索の拡張部分です。
私は以下のようなテーブルを持ってmyTable
います(myWord ==> varchar(10))
++++++++++++
+ myWord +
++++++++++++
+ AB123 +
+ A413 +
+ X5231 +
+ ABE921 +
+ 15231 +
+ 523 +
+ ABC +
++++++++++++
欲しかったのは以下の通りです。
++++++++++++++++++++++++++++++++
+ myWord + myPos + NewString +
++++++++++++++++++++++++++++++++
+ AB123 + 3 + AB +
+ A413 + 2 + A +
+ X5231 + 2 + X +
+ ABE921 + 4 + ABE +
+ 15231 + 1 + +
+ 523 + 1 + +
+ ABC + 999 + ABC +
++++++++++++++++++++++++++++++++
上記の出力を取得するために、以下のクエリを使用しました。
SELECT
myWord,
LEAST (
if (Locate('0',myWord) >0,Locate('0',myWord),999),
if (Locate('1',myWord) >0,Locate('1',myWord),999),
if (Locate('2',myWord) >0,Locate('2',myWord),999),
if (Locate('3',myWord) >0,Locate('3',myWord),999),
if (Locate('4',myWord) >0,Locate('4',myWord),999),
if (Locate('5',myWord) >0,Locate('5',myWord),999),
if (Locate('6',myWord) >0,Locate('6',myWord),999),
if (Locate('7',myWord) >0,Locate('7',myWord),999),
if (Locate('8',myWord) >0,Locate('8',myWord),999),
if (Locate('9',myWord) >0,Locate('9',myWord),999)
) as myPos,
if (LEAST (
if (Locate('0',myWord) >0,Locate('0',myWord),999),
if (Locate('1',myWord) >0,Locate('1',myWord),999),
if (Locate('2',myWord) >0,Locate('2',myWord),999),
if (Locate('3',myWord) >0,Locate('3',myWord),999),
if (Locate('4',myWord) >0,Locate('4',myWord),999),
if (Locate('5',myWord) >0,Locate('5',myWord),999),
if (Locate('6',myWord) >0,Locate('6',myWord),999),
if (Locate('7',myWord) >0,Locate('7',myWord),999),
if (Locate('8',myWord) >0,Locate('8',myWord),999),
if (Locate('9',myWord) >0,Locate('9',myWord),999)
)=999,myWord,SUBSTR(myWord,1,LEAST (
if (Locate('0',myWord) >0,Locate('0',myWord),999),
if (Locate('1',myWord) >0,Locate('1',myWord),999),
if (Locate('2',myWord) >0,Locate('2',myWord),999),
if (Locate('3',myWord) >0,Locate('3',myWord),999),
if (Locate('4',myWord) >0,Locate('4',myWord),999),
if (Locate('5',myWord) >0,Locate('5',myWord),999),
if (Locate('6',myWord) >0,Locate('6',myWord),999),
if (Locate('7',myWord) >0,Locate('7',myWord),999),
if (Locate('8',myWord) >0,Locate('8',myWord),999),
if (Locate('9',myWord) >0,Locate('9',myWord),999)
)-1)) as NewString
FROM myTable;
私の質問は
MyPosとして列に名前を付けた後、以下のクエリに示すように、別の列でその名前を使用できないのはなぜですか?
SELECT
myWord,
LEAST (
if (Locate('0',myWord) >0,Locate('0',myWord),999),
if (Locate('1',myWord) >0,Locate('1',myWord),999),
if (Locate('2',myWord) >0,Locate('2',myWord),999),
if (Locate('3',myWord) >0,Locate('3',myWord),999),
if (Locate('4',myWord) >0,Locate('4',myWord),999),
if (Locate('5',myWord) >0,Locate('5',myWord),999),
if (Locate('6',myWord) >0,Locate('6',myWord),999),
if (Locate('7',myWord) >0,Locate('7',myWord),999),
if (Locate('8',myWord) >0,Locate('8',myWord),999),
if (Locate('9',myWord) >0,Locate('9',myWord),999)
) as myPos,
if (myPos=999,myWord,SUBSTR(myWord,1,myPos-1)) as NewString
FROM myTable;
しかし、これは私にエラーを与えます
Unknown column 'myPos' in 'field list':
詳細はこちらをご覧ください
エイリアス名を使用して、このクエリを短くするために何ができるかを教えてください。