嘿,伙计们,我正在使用这个查询来获取使用自动增量的表的最大值
SELECT table_schema,
table_name,
data_type,
( CASE data_type
WHEN 'tinyint' THEN 255
WHEN 'smallint' THEN 65535
WHEN 'mediumint' THEN 16777215
WHEN 'int' THEN 4294967295
WHEN 'bigint' THEN 18446744073709551615
end >> IF(Locate('unsigned', column_type) > 0, 0, 1) ) AS MAX_VALUE
FROM information_schema.columns
WHERE table_schema NOT IN ( 'MYSQL', 'INFORMATION_SCHEMA', 'PERFORMANCE_SCHEMA'
)
AND extra = 'auto_increment'"我很难理解IF语句在做什么。
end >> IF(Locate('unsigned', column_type) > 0, 0, 1) ) AS MAX_VALUE有什么主意吗?
发布于 2013-12-03 01:58:37
双尖括号(大于符号)是二进制移位运算符。例如,如果列类型是无符号整数,它将移动1位置(实质上是对数字的平方),如果它是常规有符号整数,则根本不会移位。有符号整数使用一个位来表示正数还是负数。一个无符号整数使用该位作为值的一部分,因此它可以保存一个更高的最大值,但却不能保留负值。讲得通?
发布于 2013-12-03 02:01:05
函数'Locate('unsigned',column_type)‘被运行。这将检查字符串'unsigned‘是否出现在名为' column _type’的列中。如果在'column_type‘中找到,'Locate’函数将返回'unsigned‘中第一个字母的字符偏移/位置,如果没有找到,则返回0 (0)。这个结果被测试为大于0 '> 0'.如果为TRUE,则返回下一个表达式,在上述情况下为零(0)。如果为FALSE,则返回最终表达式1 (1)。
在其他语言中,它可以写成这样:
if( Lotate('unsigned', column_type) > 0 ) {
return 0;
} else {
return 1;
}https://stackoverflow.com/questions/20341190
复制相似问题