• ベストアンサー

テーブルの設計はとりあえず文字列で取り込み?

テーブルの設計はとりあえず文字列で取り込み? こんにちは。会社の上司にSQLについて教えてもらいました(ACCESS2003)。 上司曰く、とりあえずテーブルの設計はvarcharにしておけば大丈夫。 もし取り込んだ値が数値なら、あとで数値に変換する関数で数値に変換して計算行えばいいよと言われました。 とりあえず、文字列なら必ずインポートできるからテーブルのデータ型は全て文字列型。 というのは正しいのでしょうか?様々な型があるのに、すべて文字列型にしてもいいのかなと素朴な疑問が生まれました。 よろしくお願いします。

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

  • ベストアンサー
  • nda23
  • ベストアンサー率54% (777/1415)
回答No.4

>varcharにしておけば大丈夫 それはフィールドのデータ型の話ですね。 業務にマッチしたテーブル設計とは次元が 違います。 >文字列なら必ずインポートできるから インポートするとは即ち、そういうテーブルが 新しくできると言うことなので、「設計する」 という話ではなくなります。 確かに、何も考えないでインポートすると、 勝手に型が決まってしまうので、会員IDの ように前ゼロが意味を持つデータなのに、 数値と認識されて前ゼロが取れるという トラブルが起きないとも限りません。 なので、インポート時の問合せには全て 文字型と答えておけと言うのかも知れない ですね。 でも、それは技術云々ではなく、業務上の 要件ですから、知らなくてよいというもの でもないと思いますよ。 少なくとも、数値、文字列、日付くらいは区別 して使うべきでしょうね。いずれは使いこなせる ようにならないと、アナタが困りますよ。

mellow91
質問者

お礼

ありがとうございました!!

その他の回答 (3)

  • layy
  • ベストアンサー率23% (292/1222)
回答No.3

補足 インポートとかエクスポート、ファイル転送等外部とのやりとりは自分らのシステムだけでなく相手がいますから、連携の確立はけっこう重要です。 とりあえずデータ受け取れば何とかなる。インポートは失敗できないし何かあっても修正しないで済む方がうれしい。そういう意味も含まれているはず。

mellow91
質問者

お礼

ありがとうございました!!

  • nora1962
  • ベストアンサー率60% (431/717)
回答No.2

> 上司曰く、とりあえずテーブルの設計はvarcharにしておけば大丈夫。 データ規模が小さいうちはいいですけどね。 データ量が大きくなると、数値は数値型、日付は日付型で持っておいたほうがDBも小さくなりますし、クエリの際の演算コストも少なくてすみます。 なんにせよ、どこかのタイミングではデータを正しくしなければならないですから、インポートの前か後かはどちらでも。本番用のテーブルは型分けて使用することをお勧めします。

mellow91
質問者

お礼

ありがとうございました!!

  • FEX2053
  • ベストアンサー率37% (7987/21355)
回答No.1

型指定すると、読み込み時点でエラーする可能性があります。 読み込み時点のエラーは低レベルなエラーなので、読み込みエラーをさせるとシステム全体が止まってしまいますが、読み込んでからの後処理なら、その手のエラーは止めずに続行させるようプログラミングすることが可能です。どっちが良いかはシステムの考え方に依存しますので、どっちが正しいとは言えません。 まあ、手慣れたプログラマなら、まず文字列で持ち込んでから判断させる方がラクなんですけどね・・・。

mellow91
質問者

お礼

ありがとうございました!!

関連するQ&A

  • 文字列を time 型に変換するには。

    文字列を time 型に変換するには。 お世話になります。 PostgreSQL 8.2 & PgAdmin 1.6.3(WinServer 2003)を使用しています。 varchar 型のカラムに格納されている時刻を表す文字列('9:15' など)を time 型に変換してビューを作成する必要があるのですが、できずに困っています。 具体的には... 「table1」というテーブルに「時刻」(varchar 型)という名前のカラムを作成し、「9:15」という文字列を格納しておきます。 これをもとにビュー(view1)を作ろうとしているのですが、select 文のところで 、ERROR: syntax error at or near "時刻" SQLステート:42601 というエラー(構文エラー)が出てしまいます。  select time 時刻 from table1  結果:ERROR: syntax error at or near "時刻" SQLステート:42601 ちなみに、時刻を文字列で指定してやると、ちゃんと time 型で結果が返ります。  select time '9:15'  結果:09:15:00 抜本的に方法が間違っているとはおもうのですが、いくら調べてもこれを解決できるようなサイトが見当たりませんでした。 文字列を time 型に変換するにはどのようにしたらよいのかご教示いただけないでしょうか。 よろしくお願いします。

  • Access のテーブル上で文字列の操作をしたい

    Excelからデータをインポートし、他のデータベースとリンクしているデータとの不一致データを抽出したいのですが、 Excelからインポートしたデータは ・全て大文字 ・文字の後に半角1スペース に対し、データベース側は ・全て小文字 ・文字の後ろにはスペースがない の為、全て不一致となってしまいます。 Excelからインポートしたデータをテーブル上で「文字を全て小文字に変換」し「不要なスペースの削除」をする事はできませんでしょうか? クエリ上で文字を小文字にする事はできましたが、変換した(テーブルにフィールドがない)データとクエリする事ができず煮詰まってしまいました。。 どなたか教えてください。。

  • SQL SERVER 2005 にて全テーブルの文字列を置換する方法を

    SQL SERVER 2005 にて全テーブルの文字列を置換する方法を探しています。 ものすごく基礎的なことでしたら申し訳ございません。 SQL SERVER 2005で作成したDBがあるのですが、この中の全てのテーブル内を検索し、 「AAA」という文字列を「BBB」に置換したいと考えています。 上記は例えですが、とにかく全てのテーブル内の全ての文字列を検索し、置換できる方法は無いでしょうか。 どうかご教示のほど、よろしくお願いいたします。

  • MS Access 複数文字列の置き換えについて

    アクセスはデザインビューでクエリを組むことができる程度の初心者です。 できればSQLを直接いじらずにもできる方法でお教え頂ければ幸いです。 1つのテーブル内に30種類の文字を置き換えたい列が10個あります。 置き換えたい列A~Jには、それぞれ異なるデータが入っていますが、置き換えたい内容は同じです。 01~30までの数値をそれぞれ対応する文字あ~ほに置き換えたい列が10個あるということです。 クエリを組んでreplaceやswitchを使うには式が長すぎると怒られてしまいますし、変換用のテーブルを作ろうにも置き換えたい列が10個もあるのでうまく繋げません。 変換用テーブルを10個作ればできるのかもしれませんが、さすがにそこまで無駄なテーブルは作るのは抵抗があります。 何かスマートな方法があればと探しています。 よろしくお願い致します。

  • access2003 「#エラー」を文字列にしたい

    テキスト型に入れた値を数値に変換し、「#エラー」を文字列にしたい テーブル1のデザインビューで ・フィールド1 テキスト型 ・主キーなし として データを 1 2 あ を投入します。 そして SELECT CLng(テーブル1!フィールド1) AS 数値型に変換 FROM テーブル1; クエリを作りました。 1と2は数値に変換されますが、文字列を入れた「あ」は 「#エラー」になります。  「#エラー」を「未設定」という文字列にしたいのですが どうすえばいいのでしょうか? よろしくお願いします。

  • アプリから受け取った文字列を日付型に出来ない

    いつもお世話になっています。 タイトルにもあります通り、 アプリから受け取った文字列の日付型変換が上手くいかず失敗します。 状況は下記です。 SQL SERVER 2005に、 アプリから2っの文字列を受け取り、その文字列を日付型に変換し、 日付範囲検索をする。といったストアドを作成しました。 アプリ開発環境はVisualStudio2008、C#のウィンドゥズフォームです。 ストアド自体はManagement Studio上で日付型変換可能な 文字列2っを渡し、単体で実行すると期待通りの動作をします。 しかしアプリから文字列を受け取り実行すると、 「文字列から datetime 型に変換中、変換に失敗しました。」 というエラーがアプリ側に返されます。 しかし、この時アプリが渡す文字列をコピー&ペーストで ManagementStudioのクエリデザイナで実行すると上手く行きます。 アプリから日付変換前の文字列を渡す時に必要な何かが抜けているのでしょうか?ご教授お願いします。 ---ストアドを呼ぶアプリ側--- string kaishibi; string syuryobi; kaishibi += "1753/01/01"; syuryobi += "9999/12/31"; System.Data.SqlClient.SqlCommand hCommand = cSqlConnection.CreateCommand(); hCommand.CommandText = "EXECUTE [ストアド名] kaishibi,syuryobi"; System.Data.SqlClient.SqlDataReader cReader = hCommand.ExecuteReader(); (ここでエラー、「文字列から datetime 型に変換中、変換に失敗しました」) --ストアド側-- ALTER PROCEDURE [ストアド名]  @startData VARCHAR(50),  @endData VARCHAR(50) DECLARE @kaishibi DATETIME, @syuuryoubi DATETIME SET @kaishibi = CONVERT(VARCHAR,@startData,120) SET @syuuryoubi = CONVERT(VARCHAR,@enddata,120) SELECT LOGNO FROM LOG_TBL WHERE DateTime between @kaishibi and @syuuryoubi

  • 文字列の計算について。。。

    Excelでなのですが、外部データの取り込みをしました。 その時に、文字列で取り込んだ数値を計算したいのですが、 うまく出来ません。 セルの書式設定で数値にしたのですが、計算出来ません。 関数を使って数値に変換すると出来たのですが、 50枚シートがあるものが10ブックあります。 計算したい列もそれぞれのシートでばらばらなので困ってます。 簡単に出来る方法はないでしょうか?

  • テキストを必ず文字列で取り込みさせたい

    エクセルで、外部データの取り込みを行う時、 「1-1」のデータを標準で取り込んでしまうと、 「1月1日」と勝手に変換されてしまいます。 これは、取り込み過程で「文字列」指定すれば、 「1-1」のままで取り込まれる事は分かっています。 この外部データの取り込み作業を他人にお願いするとき、 何度説明しても「文字列」指定を漏らしてしまう事があり、 非常に困っております。 そこで、外部データの際に「文字列」をデフォルトにする方法が無いかと考え、 色々調べてみましたが、残念ながら見つかりませんでした。 もしご存知の方がいましたら、その方法を教えて下さい。 あるいは、別のいい手段があればそれを教えて下さい。 但し、エクセルの標準機能内かつVBA不可とします。 よろしくお願いします。

  • BCPでCSV内の文字列をテーブルのDatetime型カラムに取り込む方法

    BCPを使用してCSVをテーブルに取込みたいのですが、 CSV内に日付形式の文字列(YYYY/MM/DD)があり、 取込先のテーブルの型はDatetimeになっています。 フォーマットファイルのデータ型は「SYBCHAR」 で設定しているのですが、いざ取込もうとすると、 以下のようなエラーが出てうまく取込めません。 SQLState = 22008, NativeError = 0 Error = [Microsoft][ODBC SQL Server Driver]日付の形式が正しくありません。 フォーマットファイルの設定が悪いのでしょうか? なんとか回避する方法はないでしょうか。

  • PL/SQLでの文字列と数値の比較について

    いつもお世話になっております。 次のように、今が午前中なら「AM」と表示するPL/SQLのプログラムを考えています。 BEGIN if TO_CHAR(SYSTIMESTAMP,'hh24')<12 THEN DBMS_OUTPUT.PUT_LINE('AM'); END if; END; / 動作しているように見えるのですが、TO_CHARはVARCHAR2型を返すとマニュアルに書いてありました。TO_CHARが返す値は数値に変換したほうがよいのでしょうか。あるいはPL/SQLでも、文字列は数値に変換されるのでしょうか。 お教えいただけると助かります。 何卒よろしくお願いいたします。