AS/400でジュリアンデートを持つデータは、スクリプトを介してyyyy/MM/dd形式に変換してレプリケーションすることが可能です。
ソース:AS/400(SALDATEがジュリアンデートです)
ターゲット:Oracle(SALDATEがジュリアンデートから変換してyyyyMMdd形式にする予定のフィールドです)
●グローバルスクリプトに下記を記述します
Imports Microsoft.VisualBasic
Imports DBMotoPublic
Imports DBMotoScript
Imports DBRS.GlobalScript
Imports System.Data
Namespace DBRS
Public Class GlobalScript : Inherits IGlobalScript
Public Shared globalCounter As Integer
‘This function takes a numeric Julian date in the format YYYDDD where
‘YYY is the number of years since 1900 and DDD is the day of the year
‘and returns a VB.Net date value or Null if the original value was null
‘One adds this function to the global script and uses it in a mapping
‘expression. Be sure to set the source column to Use Unmapped
Public Shared Function JulianToDate(obj as Object) as Object
‘If the value is null return null
If obj Is Nothing Then Return Nothing
‘If the value is non numeric return null
If Not IsNumeric(obj) Then Return Nothing
‘Get the year value
Dim intYears as Integer
intYears = Int(obj/1000)
‘Get the day of the year and subtract 1 because we’ll be adding
‘this value to January 1
Dim intDays as Integer
intDays = (obj – intYears * 1000) – 1
‘Calculate the date
Dim datDate as Date
datDate = CDate(“1/1/” & Str(1900 + intYears)).AddDays(intDays)
‘Return the date
Return datDate
End Function
End Class
Public Class MappingRule : Inherits IMappingRule
End Class
Public Class GlobalEvents : Inherits IGlobalEvents
End Class
End Namespace
マッピング画面にて、対象のフィールドでMap to Expressionを開きます。
User functionsから先ほど設定したスクリプトの関数を選択し、引数に対象フィールド名を設定します。
●リフレッシュ結果
●ミラーリング結果
正しく変換してレプリケーションできました。
関連したトピックス
- レプリケーションの際にnullを特定の値に変換する方法 その2【リアルタイムレプリケーションツールDBMoto】
- [DBMoto]関数を使用してレプリケーション時のデータを変換する方法(VB/C#言語選択、関数適用、ユーザ関数作成、置換関数、一括設定手順)
- [DBMoto][スクリプト]カラムを結合・分割したレプリケーション
- [Syniti(旧DBMoto)]レコード競合(コンフリクト)発生時のレコード内容を出力する方法
- Syniti Data Replication (旧DBMoto)でのスクリプトの書き方⑤:フィールドマッピング関数の書き方
- レプリケーションの際にnullを特定の値に変換する方法 その1【リアルタイムレプリケーションツールDBMoto】
- 複数のテーブルにあるレコードを1つのテーブルへ統合する際の注意点【リアルタイムレプリケーションツールDBMoto】
- 複数の複製元サーバから1つの複製先サーバへの結合レプリケーションもDBMotoで簡単実現
- [DBMoto]「未マッピング使用」機能によるマッピング外のデータを活用したレプリケーション
- [Syniti(DBMoto)][スクリプト] 特定カラムの値が変更となった場合、ターゲットのレコードを削除するサンプルスクリプト