
syscolumns から 各フィールドごとのデータ型を取得して「数字」項目か「文字」項目か判断させたいのです。
要は Where句で使うパラメータにフィールドが「文字」項目であれば自動的に「'」を付与するようにしたいのです。
下記のSelect文でscaleがNULLにも関わらずタイプに「文字」と入りません、どうしてでしょうか
----------------------------------------------------------------
selectsc.name as フィールド名,sc.scale,case sc.scale when null then '文字' else '数字' end as タイプ
fromマスター管理_DB.dbo.sysobjects as so join マスター管理_DB.dbo.syscolumns as sc on so.id=sc.id
join マスター管理_DB.dbo.systypes as st on sc.xtype=st.xtype
whereso.type='V' and left(so.name,2)='K_' and LEFT(st.name,3)<>'sys'
----------------------------------------------------------------
(フィールド名) (scale) (タイプ)
勘定科目コード 0 数字
勘定科目名 NULL 数字(←「文字」になってほしい)
貸借 NULL 数字(←「文字」になってほしい)
計科目名 NULL 数字(←「文字」になってほしい)
----------------------------------------------------------------
また、日付(日時)を判断できる項目はないでしょうか?
よろしくお願いします。
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と全部拾えるでしょう。
「私が書いたらこうするだろうというの」をそのままいただきました。
内容は時間を書けて分析します。
ありがとうございました、これでゆっくり寝られます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Access(アクセス) アクセス テーブルの空白を変数に置換するボタンが作りたい 4 2022/07/08 11:19
- その他(コンピューター・テクノロジー) 【Tableau Desktop】文字列から8桁の数字を日付型(yyyyMMdd)として取得 1 2023/07/31 10:17
- その他(データベース) Accessのクエリで1フィールドの抽出条件設定をNullでなく全角半角含む空白のみの文字列でない文 1 2023/04/24 15:20
- Visual Basic(VBA) ACCESS DAO で不要なテーブルのフィールド(列)の削除 4 2022/06/23 12:13
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- SQL Server [SQLServer] テーブル名からカラム名を取得する 1 2022/08/23 21:20
- Visual Basic(VBA) 集めたシートのシート名を変更したい。 下記のコードでサブフォルダにあるファイルのSheet3を集めて 6 2022/08/23 10:38
- PHP if(preg_match("/[^0-9]/",$gu_d)){意味を教えてください。 1 2022/05/06 05:37
- PHP ここでの ②if($su_d<>"")の比較演算子 を使う理由は 1 2022/03/26 02:33
- MySQL あと、MySQLの文字コードはutf8 気になりますね 1 2022/12/01 07:22
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
マイクラPC版のコマンドで効率...
-
エクセルの関数について教えて...
-
行数の取得
-
MySQL5.5 viewの処理速度改善に...
-
Mysql でレコードを追加した時...
-
埼玉県の中央部の方!!
-
テーブルの結合について
-
'id'を無視して、外部ファイル...
-
タグを記録したテーブルの書き...
-
データの連番
-
クリアエステヴェールについて
-
MyISAMからMEMORYに変換した場...
-
主キーレコードを削除する場合
-
355番356番357番がわかりません...
-
SQLで、アクセス集計について困...
-
どちらのアクセを買おうか迷っ...
-
時間毎に単価が変わるログの集...
-
リスト作成
-
ペキニーズのブリーダー又はシ...
-
『教えてgoo』を退会するには?
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで最後の文字だけ置き...
-
エクセルの関数について教えて...
-
select文のwhere句に配列を入れ...
-
VIEWの元のテーブルのindexって...
-
エラー 1068 (42000): 複数の主...
-
SQLにて特定の文字を除いた検索...
-
【Transact-sql】 execの結果を...
-
マイクラPC版のコマンドで効率...
-
SQL Left Join で重複を排除す...
-
sqlで、600行あるテーブルを100...
-
複数テーブルのGROUP BY の使い...
-
WordpressのContact form 7でzi...
-
クエリ表示と、ADOで抽出したレ...
-
SQLサーバから、項目の属性(型...
-
selectした大量データをinsert...
-
Access パラメータクエリをcsv...
-
副問合せの書き方について
-
inner joinをすると数がおかし...
-
insertを高速化させたい
-
[MySQL] 3つのテーブルの結合で...
おすすめ情報