• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:フィールドのデータ型を取得して判断したい)

フィールドのデータ型を取得して判断したい

このQ&Aのポイント
  • syscolumnsから各フィールドごとのデータ型を取得し、数字項目か文字項目か判断させたい。
  • Where句で使うパラメータにフィールドが文字項目であれば自動的に'を付与する。
  • 日付(日時)を判断できる項目はあるか。

質問者が選んだベストアンサー

  • ベストアンサー
  • jamshid6
  • ベストアンサー率88% (591/669)
回答No.1

・CASE文を以下の通り変更してください。 > case when sc.scale is null then '文字' else '数字' end as タイプ CASE xxx WHEN の書式の場合、条件は「=」とみなされます。 フィールド=NULLはANSI標準では常にFalseです。 ・また、おそらくこのままでは正しくでません。 (floatやrealが数字とみなされない) 私が書いたらこうするだろうというのを参考までに書きます。 なお、SQL Server 2008をお使いならば、sysobjects/syscolumnsでなく、sys.objects/sys.columnsを使った方がよいです。 SQL Server 2005のときから次バージョンではsysobjectsなどはサポートされない可能性があると言われていますので、 さすがに次のバージョンではなくなっているかもしれませんので。 select sc.name as フィールド名, case when type_name(sc.user_type_id)='timestamp' then 'その他' when type_name(sc.user_type_id) like '%date%' then '日付' when type_name(sc.user_type_id) like '%time%' then '日付' when sc.precision<>0 then '数字' when sc.collation_name is not null then '文字' else 'その他' end as タイプ from sys.objects as so inner join sys.columns as sc on so.object_id=sc.object_id where so.type='V' and left(so.name,2)='K_' ・日付を判断する項目はなく、上記の通り判別するしかなさそうです。  ただ、date,time,smalldatetime,datetime,datetime2,datetimeoffsetと全部拾えるでしょう。

SEsyo
質問者

お礼

「私が書いたらこうするだろうというの」をそのままいただきました。 内容は時間を書けて分析します。 ありがとうございました、これでゆっくり寝られます。

関連するQ&A