私はこのような番号を持っています: 840106
私は次のことをする必要があります:
- 番号を日付追加に変更し、番号を反転します: 06-01-84
- 日付の下 2 桁に 28 を追加します: 06-01-12
84 + 16 = 00 + 12 = 12
番号は常に変化し、850617 になることもありますが、形式は常に同じで、最後の 2 桁に 28 を追加します。
ここで私を助ける方法はありますか?
ここにsqliteのソリューションがあります:
create table t( c text);
insert into t (c) values(990831);
insert into t (c) values(840106);
insert into t (c) values(800315);
insert into t (c) values(750527);
insert into t (c) values(700923);
insert into t (c) values(620308);
select c, substr(c,5,2) || '-' || substr(c,3,2) || '-' ||
case when (substr(c,1,2) + 28) < 100 then (substr(c,1,2) + 28)
else case when ((substr(c,1,2) + 28) - 100) < 10 then '0' || ((substr(c,1,2) + 28) - 100)
else ((substr(c,1,2) + 28) - 100)
end
end
from t;
これは、使用して mysql に移行できる t-sql ソリューションです。
declare @myDate as char(8) = '840106';
declare @y as char(2), @m as char(2), @d as char(2);
set @y = LEFT (@myDate, 2);
declare @yi as int = Convert (int, @y);
IF @y between 30 and 99 ----------- pick a cut-off year
SET @yi = (28 - (100-@yi));
SET @y = CONVERT(char, @yi)
set @m = SUBSTRING(@myDate, 3, 2);
set @d = SUBSTRING(@myDate, 5, 2);
SET @myDate = @d + '-' + @m + '-' + @y;
PRINT @myDate;
日付が日付を含む列の名前であると仮定します。
DATE_FORMAT(DATE_ADD(STR_TO_DATE(date, %y%m%d), INTERVAL 28 YEAR), %d-%m-%y);
これが行うことは、最初に文字列を日付にフォーマットし、次に 28 年を追加してから、新しい形式の文字列に変換することです。
SQLite はこれに関して非常にトリッキーです。部分文字列を使用する必要があります。
substr(date,5) || "-" || substr(date,3,4) || "-" || CAST(CAST(substr(date,1,2) as integer) + 28 - 100) as text
私は SQLite の経験があまりないので、キャストが少し変かもしれません。