ネットワーク対応・沙羅の上位版・シンサラ

機能重視型・ご相談はお気軽に 開発:寺院コム

お見積
Lineサポート
遠隔サポート
最近の記事
予約・相談
スマホ版
サラデン
旧沙羅
開発メモなど

日付変換データコンバート用SQL※開発会社向け情報

昔のプラグラムに多いのですが、日付データは、開発会社さんによっては、

明治=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

関連記事

予約カレンダー
2026年4月
1
×
2
×
3
×
4
×
5
×
6
×
7
×
8
×
9
×
10
×
11
×
12
×
13
×
14
×
15
×
16
×
17
×
18
×
19
×
20
×
21
×
22
×
23
×
24
×
25
×
26
×
27
×
28
×
29
×
30
×
2026年3月

PAGE TOP
LINE 開発室直結