【发布时间】:2021-05-27 01:55:38
【问题描述】:
上下文
game_progress 列的类型为 varchar。它包含以下值:
1 级、10 级、12 级、20 级
我希望 WHERE 条件仅查看此字符串值中的数字。
我尝试了什么
我正在尝试在 Teradata DBMS 上执行以下 SQL 查询。
SELECT user_id, CAST(REGEXP_REPLACE(game_progress, 'LEVEL ', '') as INTEGER)
FROM database1.vw_ft_rockroll a
INNER JOIN database1.vw_dim_rockroll b on a.progress_id = b.progress_id
WHERE user_key = 21111111 and game_type = 'LEVEL'
and CAST(REGEXP_REPLACE(game_progress, 'LEVEL ', '') as INTEGER) < 15
如果我不包含最后一个以< 15 结尾的where 条件,则查询有效。
当我输入 and CAST(REGEXP_REPLACE(game_progression, 'LEVEL ', '') as INTEGER) < 15 时,它给了我这个 SQL 错误:
[2620 : HY000] 格式或数据包含错误字符
另一次尝试失败
另外,如果我只尝试在添加and CAST(REGEXP_REPLACE(game_progress, 'LEVEL ', '') as INTEGER) < 15 之前平均它的工作级别数。
添加后,我收到以下错误:
计算过程中发生数值溢出。
SELECT AVG(CAST(REGEXP_REPLACE(game_progress, 'LEVEL ', '') as INTEGER)) FROM database1.vw_ft_rockroll a
INNER JOIN database1.vw_dim_rockroll b on a.progress_id = b.progress_id
WHERE user_key = 21111111 and game_progression_type = 'LEVEL'
and CAST(REGEXP_REPLACE(game_progress, 'LEVEL ', '') as INTEGER) < 15
有谁知道如何解决这个问题?
【问题讨论】:
-
是的,对不起,这是给 Teradata 的!
-
您是否真的阅读了上一个问题的答案/cmets? stackoverflow.com/q/66352258/2527905