Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL:如何检查提供的值是数字/整数还是字母?_Mysql_Sql_Php 5.3 - Fatal编程技术网

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

MySQL:如何检查提供的值是数字/整数还是字母?,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

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

例如,这是我的工作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

Else
p.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