Php 如何从MySQL中截短值并添加一个加号,并显示为输入的默认值?
我有MySQL数据库,数据如下:Php 如何从MySQL中截短值并添加一个加号,并显示为输入的默认值?,php,mysql,sql,html,phpmyadmin,Php,Mysql,Sql,Html,Phpmyadmin,我有MySQL数据库,数据如下: id | name 65 | 2016.C007 65 | 2016.C006 ... | ... 我编写此代码是为了获取最后的数据: function latestVersion() { $con = openLockMySQLdb('labcom', 'versions', 'READ'); $q= mysql_query('SELECT name FROM versions ORDER BY name desc LIMIT 1'
id | name
65 | 2016.C007
65 | 2016.C006
... | ...
我编写此代码是为了获取最后的数据:
function latestVersion() {
$con = openLockMySQLdb('labcom', 'versions', 'READ');
$q= mysql_query('SELECT name FROM versions ORDER BY name desc LIMIT 1', $con);
$result = mysql_fetch_assoc($q);
if ($result)
echo date("Y").".".$result['name'];
else
echo "mistake";
closeUnlockMySQLdb($con);
}
这一结果是:2016.2016.C007。但我想写下2016.C008。顺便说一句,我想在最后一个加上+1 基于此:
“名称”列下的数据是否始终采用此格式。CXXX
1000111
是的,总是这样里克利14 问题是:
SELECT
CONCAT('C', LPAD(SUBSTRING(name FROM LOCATE('.C' ,name) + 2 FOR (LENGTH(name) - LOCATE('.' ,name))) + 1,3,'0')) AS 'name'
FROM versions
ORDER BY name
DESC LIMIT 1
更多:如果数字曾经达到或超过3位最大数字(即999),则需要采用以下查询: 用例场景:对于
2016.C999
中的name
列中的值:
SELECT
CONCAT(
'C',
LPAD(SUBSTRING(name FROM LOCATE('.C' ,name) + 2 FOR (LENGTH(name) - LOCATE('.' ,name))) + 1,
IF (
SUBSTRING(name FROM LOCATE('.C' ,name) + 2 FOR (LENGTH(name) - LOCATE('.' ,name))) + 1 >= 1000,
CHAR_LENGTH(SUBSTRING(name FROM LOCATE('.C' ,name) + 2 FOR (LENGTH(name) - LOCATE('.' ,name))) + 1),3
),
'0'
)
) AS 'name'
FROM versions
ORDER BY name
DESC LIMIT 1;
结果是这
2016.2016.C007
。想要这个:2016.C008
。如果是这样的话,那么为什么要追加日期?因为我希望第一部分(在“.”之前)是实际年份,而第二部分来自查询。name
列下的数据总是采用这种格式year.CXXX
?是的,总是这样。我的意思是它在C
之后需要3个字符。谢谢您的帮助,我尝试了第一个查询,但结果是2016年。C1.5。不是2016.C008请检查一下。我假设您选择的名称列包含如下值:2016。C007
我检查了它,它可以与FIDDLE一起工作,但当我复制到代码中时,在某个地方出现了语法问题。但是如果我这样写的话:CONCAT(\'C\',LPAD(子字符串(名称来自LOCATE(\'.C\',name)+2代表(长度(名称)-LOCATE(\'.\',名称))+1,3,\'0\')作为版本的“名称”,按名称顺序描述限制1',$con);没关系,但结果是2016.C1.5请运行此从版本中选择名称按名称订购desc LIMIT 1
并在此处共享输出?这是原始版本。结果是:2016.2016.C007