我有一个这样的数字:840106
我需要做以下事情:
84 + 16 = 00 + 12 = 12
数字总是在变化,有时它可以是850617,但格式总是相同的添加 - 并添加28最后2位数。
任何想法如何帮助我?
答案 0 :(得分:1)
这是一个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;
答案 1 :(得分:0)
对于格式化,您可以使用 http://www.w3schools.com/sql/func_date_format.asp
要将日期添加到日期,您应该查看date_add()函数
mysql> SELECT DATE_ADD('1998-01-02', INTERVAL 31 DAY);
http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_date-add
答案 2 :(得分:0)
假设date是包含日期的列的名称:
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没有太多经验,所以演员可能有点奇怪。
答案 3 :(得分:0)
这是一个可以使用并迁移到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;