MySQL:如何检查提供的值是数字/整数还是字母?
如何检查提供的值是数字/整数还是字母 例如,这是我的工作SQLMySQL:如何检查提供的值是数字/整数还是字母?,mysql,sql,php-5.3,Mysql,Sql,Php 5.3,如何检查提供的值是数字/整数还是字母 例如,这是我的工作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\u id!=p、 页码_id
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\u id!=p、 页码_id
Elsep.parent\u id=p.page\u id
但是我可以得到正确的结果,因为我的SQL查询总是返回p.parent\u id!=p、 page_id
您可以使用
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
+---------------------------------+
mysql>选择CONVERT('7a',有符号整数);
+-------------------------------+
|转换('7a',有符号整数)|
+-------------------------------+
| 7 |
+-------------------------------+
mysql>选择CONVERT('self',有符号整数);
+---------------------------------+
|转换('self',有符号整数)|
+---------------------------------+
|0 |
或者更优
WHERE
'7' REGEXP '[[:digit:]]+' AND p.parent_id != p.page_id
OR '7' = 'self' AND p.parent_id = p.page_id
假设mysql将1
隐式转换为TRUE
和0
隐式转换为FALSE
选择'7abcd'REGEXP'[[:digit:]+'
返回1
。您需要锚定正则表达式。如果变量是非数字的,它是否总是'self'
?如果是这样的话,你能不能简单地颠倒你的想法,检查一下If(var='self',…
?是的,我想我也能做到!谢谢你的提示!谢谢你的回答!:-)
AND IF(CONVERT('7', SIGNED INTEGER) <> 0, p.parent_id != p.page_id, p.parent_id = p.page_id)
WHERE
'7' REGEXP '[[:digit:]]+' AND p.parent_id != p.page_id
OR '7' REGEXP '[[:alpha:]]+' AND p.parent_id = p.page_id
WHERE
'7' REGEXP '[[:digit:]]+' AND p.parent_id != p.page_id
OR '7' = 'self' AND p.parent_id = p.page_id