mysq请求|从表中的字符串获取数字

nhjlsmyf  于 2021-06-23  发布在  Mysql
关注(0)|答案(2)|浏览(274)

我有一个产品表(products),上面有记录:

  1. id name
  2. 1 1969-1972 Chevrolet Small Block
  3. 2 1971-1975 Chevrolet Small Block Fan Shroud
  4. 3 1964 Chevrolet Bumper Kit Complete
  5. 4 Chevrolet Clutch And Brake Pedal Assembly
  6. ...

现在我想让request end提取前四个数字作为开始日期,从6到9的字符作为结束日期。
因此结果表将是:

  1. id name start end
  2. 1 1969-1972 Chevrolet Small Block 1969 1972
  3. 2 1971-1975 Chevrolet Small Block Fan Shroud 1971 1975
  4. 3 1964 Chevrolet Bumper Kit Complete 1964 null
  5. 4 Chevrolet Clutch And Brake Pedal Assembly null null
  6. ...

谢谢!

xuo3flqw

xuo3flqw1#

  1. 1. LEFT(name , 4) as start;
  2. 2. CAST(SUBSTRING(name, 6, 4) AS UNSIGNED) as end;
mlnl4t2r

mlnl4t2r2#

您可以使用一些regexp匹配使查询更加健壮。

  1. SELECT id,
  2. name,
  3. CASE WHEN name REGEXP '^[[:digit:]]{4}[ -]' THEN CAST(LEFT(name, 4) AS UNSIGNED)
  4. ELSE NULL
  5. END AS start,
  6. CASE WHEN name REGEXP '^[[:digit:]]{4}-[[:digit:]]{4} ' THEN CAST(SUBSTRING(name, 6, 4) AS UNSIGNED)
  7. ELSE NULL
  8. END AS end
  9. FROM products

输出:

  1. id name start end
  2. 1 1969-1972 Chevrolet Small Block 1969 1972
  3. 2 1971-1975 Chevrolet Small Block Fan Shroud 1971 1975
  4. 3 1964 Chevrolet Bumper Kit Complete 1964 (null)
  5. 4 Chevrolet Clutch And Brake Pedal Assembly (null) (null)

或者,如果您想:

  1. SELECT id,
  2. CASE WHEN name REGEXP '^[[:digit:]]{4}-[[:digit:]]{4} ' THEN SUBSTRING(name, 10)
  3. WHEN name REGEXP '^[[:digit:]]{4} ' THEN SUBSTRING(name, 6)
  4. ELSE name
  5. END AS name,
  6. CASE WHEN name REGEXP '^[[:digit:]]{4}[ -]' THEN CAST(LEFT(name, 4) AS UNSIGNED)
  7. ELSE NULL
  8. END AS start,
  9. CASE WHEN name REGEXP '^[[:digit:]]{4}-[[:digit:]]{4} ' THEN CAST(SUBSTRING(name, 6, 4) AS UNSIGNED)
  10. ELSE NULL
  11. END AS end
  12. FROM products

输出:

  1. id name start end
  2. 1 Chevrolet Small Block 1969 1972
  3. 2 Chevrolet Small Block Fan Shroud 1971 1975
  4. 3 Chevrolet Bumper Kit Complete 1964 (null)
  5. 4 Chevrolet Clutch And Brake Pedal Assembly (null) (null)
展开查看全部

相关问题