Предполагая: -
- , что таблица называется convdt и
- , что вы хотите изменить (ОБНОВИТЬ) все строки в самой таблицеи
- что таблица не определена с использованием ключевых слов WITHOUT ROWID
, тогда я считаю, что это будет делать следующее: -
WITH
cte1(rowid,dc1) AS (
SELECT
rowid,
replace(
replace(
replace(
replace(
replace(
replace(
replace(
replace(
replace(
replace(
replace(
replace(data,'Jan','01'),
'Feb','02'),
'Mar','03'),
'Apr','04'),
'May','05'),
'Jun','06'),
'Jul','07'),
'Aug','09'),
'Sep','09'),
'Oct','10'),
'Nov','11'),
'Dec','12')
FROM convdt
),
cte2(rowid,dc2) AS ( SELECT rowid,substr(dc1,1,4)||'-'||substr(dc1,6,2)||'-'||substr(dc1,9) FROM cte1)
UPDATE convdt SET data = (SELECT dc2 FROM cte2 WHERE cte2.rowid = rowid);
SELECT * FROM convdt;
Используетсядва общих табличных выражения.
Первые cte1 извлекают столбцы rowid , а столбцы data заменяют Jan на 01, Feb на 02 и т. Д. (Называя data столбец как dc1 )
Второй cte2 затем извлекает rowid и столбец dc1 от переформатирования cte1 для соответствия формату ГГГГ-ММ-ДД чч: мм: сс.
Все строки таблицы convdt обновляются, получая значение замены из cte2 в соответствии с rowid .
Рабочий пример / тестовый код
DROP TABLE IF EXISTS convdt; -- For testing only drop the table
CREATE TABLE IF NOT EXISTS convdt (data TEXT); -- For testing only create the table
INSERT INTO convdt VALUES -- For testing only populate the table
('2018 Jan 16 15:53:01'),('2018 Feb 16 15:53:01'),('2018 Mar 16 15:53:01'),('2018 Apr 16 15:53:01'),
('2018 May 16 15:53:01'),('2018 Jun 16 15:53:01'),('2018 Jul 16 15:53:01'),('2018 Aug 16 15:53:01'),
('2018 Sep 16 15:53:01'),('2018 Oct 16 15:53:01'),('2018 Nov 16 15:53:01'),('2018 Dec 16 15:53:01')
;
SELECT * FROM convdt; -- Extract all the data for comparison before the updates
WITH
cte1(rowid,dc1) AS (
SELECT
rowid,
replace(
replace(
replace(
replace(
replace(
replace(
replace(
replace(
replace(
replace(
replace(
replace(data,'Jan','01'),
'Feb','02'),
'Mar','03'),
'Apr','04'),
'May','05'),
'Jun','06'),
'Jul','07'),
'Aug','09'),
'Sep','09'),
'Oct','10'),
'Nov','11'),
'Dec','12')
FROM convdt
),
cte2(rowid,dc2) AS ( SELECT rowid,substr(dc1,1,4)||'-'||substr(dc1,6,2)||'-'||substr(dc1,9) FROM cte1)
UPDATE convdt SET data = (SELECT dc2 FROM cte2 WHERE cte2.rowid = rowid);
SELECT * FROM convdt; -- Extract all the data to show the result of the conversion
Результаты
До обновления таблицы: -
После преобразования: -