0
私はこのクエリを試してみました:SUBSTRING()では、posまたはlenとして列の値を使用できません。 (エラー1054不明列)
SELECT
CHAR_LENGTH(
'{start_123}'
) AS start_len,
CHAR_LENGTH(
'{end_123}'
) AS end_len,
LOCATE(
'{start_123}',
text
) AS left_pos,
LOCATE(
'{end_123}',
text
) AS right_pos,
SUBSTRING(text, left_pos + start_len, right_pos - left_pos - end_len) AS text_part
FROM
texts
WHERE
id = 1
可読性がずっと良い代わりに直接SUBSTRING()
の内側にすべてLOCATE()
とCHAR_LENGTH()
を置くのだろうと私はそれを計算するのではない方が良いと考えていたことにより、 left_pos
。
しかし、それが返されます。
[のErr] 1054 - 'フィールドリスト'
不明な列 'left_pos' は、SUBSTRING()
で列の値を使用することはできませんか?このため、1つの結果正しい値:
SELECT
CHAR_LENGTH(
'{start_123}'
) AS start_len,
CHAR_LENGTH(
'{end_123}'
) AS end_len,
LOCATE(
'{start_123}',
text
) AS left_pos,
LOCATE(
'{end_123}',
text
) AS right_pos
FROM
texts
WHERE
id = 1
。列エイリアスは、それらが定義されている同じ 'select '(または' where')で使用することはできません。 SQLは 'select'で式の評価の順序を保証しません。式を繰り返すか、サブクエリを使用する必要があります。 –