MySQL-搜索列值的格式化组合

MySQL-搜索列值的格式化组合,mysql,sql,regex,Mysql,Sql,Regex,我有一个数据库,其中一个表有两列:group和article。两者都是int,但总是在显示给用户之前格式化: 组始终显示为2位数字,如果需要,则前导零 需要 文章始终显示为4位数字,带前导零 如果需要的话 组和文章用破折号隔开- 示例: 带有group=1和article=23的项目将作为01-0023显示给用户 继续。 我有一个php脚本,用户可以在其中搜索文章。用户当然会以格式化的方式撰写文章。我今天的脚本使用正则表达式将文章搜索与自由文本分离,然后在搜索数据库之前将组和文章彼此分离 我

我有一个数据库,其中一个表有两列:
group
article
。两者都是
int
,但总是在显示给用户之前格式化:

  • 始终显示为2位数字,如果需要,则前导零 需要
  • 文章
    始终显示为4位数字,带前导零 如果需要的话
  • 文章
    用破折号隔开-
示例: 带有
group=1
article=23
的项目将作为
01-0023
显示给用户

继续。 我有一个php脚本,用户可以在其中搜索文章。用户当然会以格式化的方式撰写文章。我今天的脚本使用正则表达式将文章搜索与自由文本分离,然后在搜索数据库之前将
文章
彼此分离

我的问题是,是否可以在查询中传递格式化字符串(例如01-0023),如果可以,我将如何操作SQL?

SELECT CAST(LEFT('01-0023', 2) AS UNSIGNED) AS `Group`
      ,CAST(RIGHT('01-0023',4) AS UNSIGNED) AS `Article`

如果要与显示给用户的值进行比较,可以执行以下操作:

where `group` = substring_index(@Group_Article, '-', 1) + 0 AND
      `article` = substring_index(@Group_Article, '-', -1) + 0 

把你的桌子改成那样

ALTER TABLE `my_table` 
CHANGE COLUMN `group` `group` INT(2) ZEROFILL,
CHANGE COLUMN `article` `article` INT(4) ZEROFILL;
创建一个视图

CREATE VIEW `v_my_table` AS 
SELECT id,article,`group`,CONCAT(`group`,"-",`article`) AS conbined FROM my_table;
对select语句使用视图

mysql> select * from v_my_table;
+----+---------+-------+----------+
| id | article | group | conbined |
+----+---------+-------+----------+
|  1 |    0005 |    03 | 03-0005  |
|  2 |    0005 |    03 | 03-0005  |
|  3 |    0021 |    12 | 12-0021  |
|  4 |    0212 |    55 | 55-0212  |
|  5 |    2113 |    04 | 04-2113  |
+----+---------+-------+----------+

它是一个已经存在的数据库,用于不同的UI(access、ruby、python、php)。我不能改变里面的任何东西。我需要按原样使用它。