我有一個包含兩列相關的資料庫。一個是生日,另一個是生日。其中一些在生日中包含日期 “BC”,但需要替換為“-” 日期
Birthdatetr 包含真實格式的日期,例如數字中的 YYYY-MM-DD,“BC”不存在。生日可以有以下格式
| 出生日期 | 生日日期 |
|---|---|
| 約公元前 900 年 | 0900-00-00 |
| 公元前 55 年之前 | 0055-00-0 |
| 公元前 4004 年 10 月 23 日 | 4004-10-23 |
它需要成為
| 出生日期 | 生日日期 |
|---|---|
| 約-900 | 0900-00-00 |
| 早于 -55 | 0055-00-0 |
| 4004 年 10 月 -23 日 | 4004-10-23 |
Abt、Bef 和 A??ft 的生日相對容易做到,這是 4004 年 4004 年 10 月 23 日,這讓我很頭疼。這只是超出了我的技能水平
我試過這個
更新 tng_people set deathdate = REPLACE(birthdate, '1', '-1') wherebirthdate like "% BC"; 更新 tng_people set deathdate = REPLACE(birthdate, '2', '-1') wherebirthdate like "% BC"; 更新 tng_people set deathdate = REPLACE(birthdate, '3', '-1') wherebirthdate like "% BC";
接著
更新 tng_people set deathdate = REPLACE(birthdate, 'BC', '') wherebirthdate like "% BC";
但是,這會使 23 Oct 4004 BC 看起來像 23 Oct -4004,這很奇怪
有人有更好的想法嗎?
uj5u.com熱心網友回復:
在 MariaDB 的最新版本中,可以在此處使用正則運算式替換:
SELECT
TRIM(REGEXP_REPLACE(birthdate,
'(.*?)(\\d{1,2} \\w{3} )?(\\d ) BC',
'\\1 -\\2\\3')) AS birthdate,
birthdatetr
FROM tng_people;

演示
以下是正則運算式模式的解釋:
(.*?)\1在任何領先的非日期部分匹配和捕獲(\d{1,2} \\w{3} )?\2在可選的日期和 3 個字母月份匹配和捕獲(\d )匹配并捕獲\3數字年份BC匹配文字'BC'
然后我們替換\1 -\2\3為在日期開始前插入一個連字符(短格式或長格式)。
如果您真的想更新該birthdate列,請使用:
UPDATE tng_people
SET birthdate = TRIM(REGEXP_REPLACE(birthdate,
'(.*?)(\\d{1,2} \\w{3} )?(\\d ) BC',
'\\1 -\\2\\3'))
WHERE birthdate LIKE '
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/524899.html
