gpt4 book ai didi

MySQL:如何检查提供的值是数字/整数还是字母?

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

如何检查提供的值是数字/整数还是字母?

例如,这是我的工作 SQL,

SELECT 
p.*

FROM page AS p

WHERE p.title = 'home'

AND IF(CONVERT('7', SIGNED INTEGER) IS NOT NULL, p.parent_id != p.page_id, p.parent_id = p.page_id)

'7'是可变的,有时是一个数字,有时是'self'。

所以当它是一个数字时,那么p.parent_id != p.page_id

否则 p.parent_id = p.page_id

但我可以正确处理,因为我的 SQL 查询总是返回 p.parent_id != p.page_id

最佳答案

您可以使用 REGEXP.

AND CASE
WHEN ('7' REGEXP '^[0-9]+$') THEN
p.parent_id != p.page_id
ELSE p.parent_id = p.page_id
END

CONVERT() 无法按预期工作的原因是非数字字符串将始终转换为 0,而不是 NULL。

mysql> SELECT CONVERT('7a', SIGNED INTEGER);
+-------------------------------+
| CONVERT('7a', SIGNED INTEGER) |
+-------------------------------+
| 7 |
+-------------------------------+

mysql> SELECT CONVERT('self', SIGNED INTEGER);
+---------------------------------+
| CONVERT('self', SIGNED INTEGER) |
+---------------------------------+
| 0 | <-- non-numeric strings always cast to 0
+---------------------------------+

如果您与 0 而不是 NULL 进行比较,您的方法可能会起作用,但我没有好的测试方法。但是,如果该值实际为 0,则会失败,您将得到错误的比较结果。

AND IF(CONVERT('7', SIGNED INTEGER) <> 0, p.parent_id != p.page_id, p.parent_id = p.page_id)

关于MySQL:如何检查提供的值是数字/整数还是字母?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10220215/

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