MS SQLの日付型(datetime型)の項目更新について
- このフォーラムに新しいトピックを立てることはできません
- このフォーラムではゲスト投稿が禁止されています
medras-igara
居住地: 台東区入谷
投稿数: 13
![新米 新米](../../uploads/rank3e632f95e81ca.gif)
こんにちは。いつもお世話になっております。
Microsoft SQL SERVERの日付型(datetime型)で質問させてください。
MAGICの変数の日付型やPervasive.SQLのデータ上の日付項目を
項目更新でデーターベースMS SQLデータの日付型(datetime型)の項目に
項目更新すると正常にデーターベースに更新されません。
たまに「DBエラー:キャストした文字コードが正しくありません」というエラーが表示されます。
MAGIC変数で未更新の時は空欄にしたいために、
書式を"YYYY/MM/DDZ "にして初期値を"0000/00/00"で項目更新しておりました。
データーベースがPervasive.SQLのデータではこの仕様で問題なく動作します。
しかし、このPervasiveデータの日付項目をMS SQLのデータに
バッチタスクで項目更新しましたが正常に更新されませんでした。
データの値が今年の日付が入ってるデータは正常に更新されますが、
"0000/00/00"や"0001/01/01"など今年の日付から大きく離れた値のデータは更新されませんでした。
初期値の場合IF関数などでdate()で更新すれば問題ないのですが、
それでは未更新のデータか更新済みのデータか判らないデータになります。
出来ることなら空欄などにしたいのです。
"0000/00/00"をMS SQLデータの日付型(datetime型)に更新する方法は無いのでしょうか?
お忙しいところ恐縮ですがお知恵をお貸し下さいませ。
どうかよろしくお願いします。
Microsoft SQL SERVERの日付型(datetime型)で質問させてください。
MAGICの変数の日付型やPervasive.SQLのデータ上の日付項目を
項目更新でデーターベースMS SQLデータの日付型(datetime型)の項目に
項目更新すると正常にデーターベースに更新されません。
たまに「DBエラー:キャストした文字コードが正しくありません」というエラーが表示されます。
MAGIC変数で未更新の時は空欄にしたいために、
書式を"YYYY/MM/DDZ "にして初期値を"0000/00/00"で項目更新しておりました。
データーベースがPervasive.SQLのデータではこの仕様で問題なく動作します。
しかし、このPervasiveデータの日付項目をMS SQLのデータに
バッチタスクで項目更新しましたが正常に更新されませんでした。
データの値が今年の日付が入ってるデータは正常に更新されますが、
"0000/00/00"や"0001/01/01"など今年の日付から大きく離れた値のデータは更新されませんでした。
初期値の場合IF関数などでdate()で更新すれば問題ないのですが、
それでは未更新のデータか更新済みのデータか判らないデータになります。
出来ることなら空欄などにしたいのです。
"0000/00/00"をMS SQLデータの日付型(datetime型)に更新する方法は無いのでしょうか?
お忙しいところ恐縮ですがお知恵をお貸し下さいませ。
どうかよろしくお願いします。
投票数:0
平均点:0.00
Kurogane
投稿数: 50
![常連 常連](../../uploads/rank3dbf8e9e7d88d.gif)
無いです。MSSQLでは0000/00/00といった日付データを持つことが出来ません。
SQLServer2005では、
datetime型:1753/01/01〜9999/12/31
smalldatetime型:1900/01/01〜2079/06/06
SQLServer2008では、
datetime型:1753/01/01〜9999/12/31
smalldatetime型:1900/01/01〜2079/06/06
date型:0001/01/01〜9999/12/31
datetime2型:0001/01/01〜9999/12/31
datetimeoffset型:0001/01/01〜9999/12/31
となっています。どの型にせよ、存在しない日付(西暦0年や0月や0日)といった値は保持できないようです。
このことに対処するには、SQLServer側を日付型ではなく、文字列型(Char等)にして対処する必要があります。
SQLServer2005では、
datetime型:1753/01/01〜9999/12/31
smalldatetime型:1900/01/01〜2079/06/06
SQLServer2008では、
datetime型:1753/01/01〜9999/12/31
smalldatetime型:1900/01/01〜2079/06/06
date型:0001/01/01〜9999/12/31
datetime2型:0001/01/01〜9999/12/31
datetimeoffset型:0001/01/01〜9999/12/31
となっています。どの型にせよ、存在しない日付(西暦0年や0月や0日)といった値は保持できないようです。
このことに対処するには、SQLServer側を日付型ではなく、文字列型(Char等)にして対処する必要があります。
投票数:0
平均点:0.00
OKABA
投稿数: 35
![半人前 半人前](../../uploads/rank3dbf8e94a6f72.gif)
>"0000/00/00"をMS SQLデータの日付型(datetime型)に更新する方法は無いのでしょうか?
日付項目の
カラム特性/記憶型式→「YYMD Date」
カラム特性/デフォルト値→「0000/00/00」
にすると、更新は可能になります。
役に立つでしょうか?
日付項目の
カラム特性/記憶型式→「YYMD Date」
カラム特性/デフォルト値→「0000/00/00」
にすると、更新は可能になります。
役に立つでしょうか?
投票数:0
平均点:0.00
medras-igara
居住地: 台東区入谷
投稿数: 13
![新米 新米](../../uploads/rank3e632f95e81ca.gif)
みなさん有り難う御座いました。
>Kuroganeさん
>このことに対処するには、SQLServer側を日付型ではなく、文字列型(Char等)にして対処する必要があります。
私の方でも調べましたら、データリポジトリの[カラム特性]→[SQL]→[タイプ]で、"CHAR(8)"を設定すると自動的にYYYYMMDDの文字型に置き換えるようでした。
この設定だととりあえずMAGICの画面で日付も扱え、なおかつMS-SQL上でも年月日がわかる内容になります。。。
この方法でとりあえずやってみたいと思います。
ありがとうございました。
>OKABAさん
>カラム特性/記憶型式→「YYMD Date」
残念ながらこの方法ではMS-SQL上ではbinary(4)になってしまいます。
MAGICでは問題ありませんが、MS-SQL上のSQL文で直接日付として扱えません。
(正確には扱い辛い。。。)
大変申し訳ないですが今回はKuroganeさんの方法でゆきたいと思います。
どうも、書き込みありがとうございました。
>Kuroganeさん
>このことに対処するには、SQLServer側を日付型ではなく、文字列型(Char等)にして対処する必要があります。
私の方でも調べましたら、データリポジトリの[カラム特性]→[SQL]→[タイプ]で、"CHAR(8)"を設定すると自動的にYYYYMMDDの文字型に置き換えるようでした。
この設定だととりあえずMAGICの画面で日付も扱え、なおかつMS-SQL上でも年月日がわかる内容になります。。。
この方法でとりあえずやってみたいと思います。
ありがとうございました。
>OKABAさん
>カラム特性/記憶型式→「YYMD Date」
残念ながらこの方法ではMS-SQL上ではbinary(4)になってしまいます。
MAGICでは問題ありませんが、MS-SQL上のSQL文で直接日付として扱えません。
(正確には扱い辛い。。。)
大変申し訳ないですが今回はKuroganeさんの方法でゆきたいと思います。
どうも、書き込みありがとうございました。
投票数:0
平均点:0.00