簡體   English   中英

如何使用SQL從格式化的字母數字字符串中提取第一和第二個數字?

[英]How to extract 1st and 2nd number from a formatted alphanumeric string using SQL?

weight列中的示例數據(來自3行數據)

+-------------------------+
| weight                  |
+-------------------------+
| Pump:398kg Motor:0kg    |
| Pump:448# Motor:997#    |
| Pump:355kg Motor:2495kg |
+-------------------------+

有沒有辦法分別從列中提取第一個數字和列中的第二個數字?

注意

  • 字符串將始終以Pump:開頭Pump:
  • Motor:永遠在中間
  • 面額定界符是#kg ,沒有其他
  • 重量始終是整數

我的目標是將數字分成各自的列

UPDATE table set weight_pump = ?, weight_motor = ?
UPDATE table set weight_pump = 398, weight_motor = 0

我可以使用PHP解決此問題(選擇每一行,執行REGEX提取數字,寫回該行)

但是,我正在尋找的是純SQL解決方案(如果存在)。 最好有一個SQL語句(如果存在),但我不反對幾個語句或中間步驟。

我看到了其他答案,但它們專注於從SQL提取單個數字,我正在尋找更強大的功能。

注意:也可以分兩個步驟完成(一個用於“ kg”,一個用於“#”)以簡化查詢。

這是使用substring_index()的解決方案。

我喜歡這個功能,因為它並不太依賴特定的字符位置。

mysql> SELECT
  SUBSTRING_INDEX(SUBSTRING_INDEX(SUBSTRING_INDEX(weight, ':', -2), 'kg', 1), '#', 1) AS weight_pump,
  SUBSTRING_INDEX(SUBSTRING_INDEX(SUBSTRING_INDEX(weight, ':', -1), 'kg', 1), '#', 1) AS weight_motor 
FROM MyTable;

輸出:

+-------------+--------------+
| weight_pump | weight_motor |
+-------------+--------------+
| 398         | 0            |
| 448         | 997          |
| 355         | 2495         |
+-------------+--------------+

這也適用於UPDATE:

mysql> UPDATE MyTable
  SET weight_pump = SUBSTRING_INDEX(SUBSTRING_INDEX(SUBSTRING_INDEX(weight, ':', -2), 'kg', 1), '#', 1),
      weight_motor = SUBSTRING_INDEX(SUBSTRING_INDEX(SUBSTRING_INDEX(weight, ':', -1), 'kg', 1), '#', 1);

在此處閱讀有關此功能的更多信息: http : //dev.mysql.com/doc/refman/5.7/zh-CN/string-functions.html#function_substring-index

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM