gpt4 book ai didi

php - MySQL临时表中varchar内的数值

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

问题

我有一个字段,其值类似于

 "ABC1234"
"ABC5678/DEF"
"AB1298"
"AB1298/DEF"

我想从其中的每一个中提取数值,例如:

  1234
5678
1298
1298

注意:数值始终为“一起”(1234),并且始终仅由 4 位数字组成。

我试图先删除双引号以使用正则表达式: SELECT REPLACE(model_name,'''','') FROM ProductList 注意:我使用 ' 单引号而不是双引号 "替换,因为那是数据保存的方式,并且它有效。 然后我尝试使用 Patindex 来获取数值: SELECT SUBSTRING(field, PATINDEX('%[0-9]%', field), LEN(字段)) 注意:但是,PATINDEX 不适用于 MySQL

我正在尝试这样做,因为我想通过创建一个临时表来分隔两个不同列中的每个值:

SELECT SUBSTR(t.column_one, 1, INSTR(t.column_one, ' ')-1) AS col_one, SUBSTR(t.column_one, INSTR(t.column_one, ' ')+1) AS col_two FROM YOUR_TABLE t

   val1    val2
12 34
56 78
12 98

注意:我在 XAMPP 中使用 PHPMyAdmin。

在 PATINDEX 之后,我尝试了 LOCATION 和 POSITION。 (您可以看到测试打印屏幕的顺序 here ) SELECT SUBSTRING(model_name,LOCATE('%[^0-9]%',model_name),4) FROM ProductList 注意:LOCATE 或 POSITION 函数返回位置 0,这就是没有结果的原因。我可以想象问题出在“%[^0-9]%”,因为LOCATE、POSITION和MID都不接受RegEx。

我的下一个问题是:我希望在临时表足迹中包含lvalrval,在查询开始时创建。这是因为我想通过获取输入文本值来创建查询,并且有类似的内容:

SELECT * FROM footprint WHERE lval=50;

model_name num_pos lval rval
''ABC1234'' 7 12 34
''ABC1234/DEF'' 7 50 78
''ABDCE1234'' 8 12 98

解决方案建议

最后,我想根据 lval 和 rval 的值搜索 name_model。所以下一个“查询”对我有用:

CREATE TEMPORARY TABLE IF NOT EXISTS footprint AS
(SELECT model_name,
LEAST (
if (Locate('0',model_name) >0,Locate('0',model_name),999),
if (Locate('1',model_name) >0,Locate('1',model_name),999),
if (Locate('2',model_name) >0,Locate('2',model_name),999),
if (Locate('3',model_name) >0,Locate('3',model_name),999),
if (Locate('4',model_name) >0,Locate('4',model_name),999),
if (Locate('5',model_name) >0,Locate('5',model_name),999),
if (Locate('6',model_name) >0,Locate('6',model_name),999),
if (Locate('7',model_name) >0,Locate('7',model_name),999),
if (Locate('8',model_name) >0,Locate('8',model_name),999),
if (Locate('9',model_name) >0,Locate('9',model_name),999)
) AS num_Pos
FROM ProductList) ;
SELECT name FROM (SELECT name, left(val,2) AS lval, right(val,2) AS rval FROM
(SELECT MID(pl.model_name, fp.num_Pos,4) AS val, pl.model_name AS name FROM ProductList AS pl INNER JOIN footprint AS fp ON fp.model_name=pl.model_name) p) n WHERE lval='50' and rval='50'

如果您对如何完成或改进此流程有任何其他建议,请告诉我。

谢谢你,谨致问候。

最佳答案

要拆分值的数字和字符串部分,您可以使用 trim,如下所示:

SELECT trim(field, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ"') AS col0, trim(field, '1234567890"') AS col1 FROM table

希望有帮助。

附注

此解决方案也适用于不存在函数 PATINDEX 的 sqlite 数据库。

关于php - MySQL临时表中varchar内的数值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28887881/

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