gpt4 book ai didi

mysql - SUBSTRING() 中不允许列值作为 pos 或 len ? (错误1054未知列)

转载 作者:行者123 更新时间:2023-11-29 11:02:44 25 4
gpt4 key购买 nike

我尝试了这个查询:

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

这样一来,可读性会更好,而不是将所有 LOCATE()CHAR_LENGTH() 直接放在 SUBSTRING() 中我认为最好不要计算 left_pos 两次。

但它返回:

[Err] 1054 - Unknown column 'left_pos' in 'field list'

SUBSTRING() 中不允许使用列值吗?因为这会产生正确的值:

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

最佳答案

该问题与 SUBSTRING() 本身无关。您不能在定义列别名的 SELECT 中使用列别名。 SQL(一般来说)不保证SELECT 中表达式的求值顺序。同样,SQL 不保证 SELECTWHERE 之前计算,因此相应的 WHERE 中也不允许使用别名。

在这种情况下子查询可能还不错:

SELECT t.*,
SUBSTRING(text, left_pos + start_len, right_pos - left_pos - end_len) AS text_part
FROM (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
) t

关于mysql - SUBSTRING() 中不允许列值作为 pos 或 len ? (错误1054未知列),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41939118/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com