昔のプラグラムに多いのですが、日付データは、開発会社さんによっては、
明治=1
大正=2
昭和=3
平成=4
のようにして、
例:昭和38年11月6日だとしますと、 3391106 のようなデータを使っている場合があります。
沙羅もシンサラも
昭和38年11月6日=1963/11/06 ですので、
このように変換しないといけません。
変換プログラムは作ってあります。
※もし、SQLServerで手動で行う場合は CREATE FUNCTION しておいて
CREATE FUNCTION dbo.fnWarekiIntToDate (@WarekiValue BIGINT)
RETURNS DATE
AS
BEGIN
DECLARE @s VARCHAR(20);
DECLARE @g INT;
DECLARE @yy INT;
DECLARE @mm INT;
DECLARE @dd INT;
DECLARE @yyyy INT;
IF @WarekiValue IS NULL OR @WarekiValue = 0
RETURN NULL;
SET @s = LTRIM(RTRIM(CAST(@WarekiValue AS VARCHAR(20))));
-- 7桁でなければ一旦NULL
IF LEN(@s) <> 7
RETURN NULL;
-- 数字以外が混じる場合はNULL
IF @s LIKE '%[^0-9]%'
RETURN NULL;
SET @g = TRY_CAST(SUBSTRING(@s, 1, 1) AS INT);
SET @yy = TRY_CAST(SUBSTRING(@s, 2, 2) AS INT);
SET @mm = TRY_CAST(SUBSTRING(@s, 4, 2) AS INT);
SET @dd = TRY_CAST(SUBSTRING(@s, 6, 2) AS INT);
IF @g IS NULL OR @yy IS NULL OR @mm IS NULL OR @dd IS NULL
RETURN NULL;
SET @yyyy =
CASE @g
WHEN 1 THEN 1867 + @yy -- 明治
WHEN 2 THEN 1911 + @yy -- 大正
WHEN 3 THEN 1925 + @yy -- 昭和
WHEN 4 THEN 1988 + @yy -- 平成
WHEN 5 THEN 2018 + @yy -- 令和
ELSE NULL
END;
IF @yyyy IS NULL
RETURN NULL;
RETURN TRY_CONVERT(DATE,
RIGHT('0000' + CAST(@yyyy AS VARCHAR(4)), 4) + '-' +
RIGHT('00' + CAST(@mm AS VARCHAR(2)), 2) + '-' +
RIGHT('00' + CAST(@dd AS VARCHAR(2)), 2)
);
END;
GO
たとえば Meibo テーブル に tanjoubi があり、birthday に正しい形式に移すなら、
UPDATE Meibo
SET birthday = dbo.fnWarekiIntToDate(TRY_CAST(tanjoubi AS BIGINT));
もし、VBAで手動で行う場合は、ご参考に、、、
↓
Public Function WarekiIntToDate(ByVal v As Variant) As Variant
On Error GoTo EH
If IsNull(v) Then
WarekiIntToDate = Null
Exit Function
End If
Dim s As String
s = Trim(CStr(v))
If s = "" Or s = "0" Then
WarekiIntToDate = Null
Exit Function
End If
s = Format(Val(s), "0000000")
If Len(s) <> 7 Then
WarekiIntToDate = Null
Exit Function
End If
Dim g As Integer
Dim yy As Integer
Dim mm As Integer
Dim dd As Integer
Dim yyyy As Integer
g = Val(Left(s, 1))
yy = Val(Mid(s, 2, 2))
mm = Val(Mid(s, 4, 2))
dd = Val(Right(s, 2))
Select Case g
Case 1
yyyy = 1867 + yy ' 明治
Case 2
yyyy = 1911 + yy ' 大正
Case 3
yyyy = 1925 + yy ' 昭和
Case 4
yyyy = 1988 + yy ' 平成
Case 5
yyyy = 2018 + yy ' 令和
Case Else
WarekiIntToDate = Null
Exit Function
End Select
WarekiIntToDate = DateSerial(yyyy, mm, dd)
Exit Function
EH:
WarekiIntToDate = Null
End Function









