0

INFORMATION_SCHEMA.COLUMNS テーブルの MS SQL から最大許容列長 (バイト数ではなく文字数) を取得しようとしています。CHARACTER_MAXIMUM_LENGTH は、数値型と日時型では NULL になる可能性があることがわかりました。また、INFORMATION_SCHEMA.COLUMNS テーブルで次の 3 つの列を見つけました。

  1. NUMERIC_PRECISION;
  2. NUMERIC_SCALE (NUMERIC_PRECISION に関連);
  3. DATETIME_PRECISION;

私が理解しているように、少なくとも 1 つの not - NULL 値の列が常に存在するため、その列を使用して最大長を取得できます。この列の使用法に関する明確な仕様が見つかりません。たとえば、日時型の DATETIME_PRECISION が 3 に等しいとします。INFORMATION_SCHEMA テーブルのみを使用して、その '3' から文字数を計算するにはどうすればよいでしょうか?

4

3 に答える 3

0

できません。その理由は、datetime 列には文字が格納されず、日付と時刻のバイナリ表現が格納されるためです。all に相関する文字数は、その日時をどのようにフォーマットするかによって異なります。「yyyy/MM/dd」の形式にすると、10 文字になります。ただし、.ToLongDateString(); のようにフォーマットすると、マシンに設定されている文化と言語によって異なります。

ToLongDateString() は、提供されたカルチャ/言語に対して次の値を返します。

en-us: 2009 年 12 月 5 日土曜日 fr-fr: samedi 2009 年 12 月 5 日 es-es: sábado, 2009 年 2 月 5 日

于 2013-07-25T07:40:24.307 に答える
0

質問: 「日時型の DATETIME_PRECISION が 3 に等しいとしましょう。INFORMATION_SCHEMA テーブルのみを使用して、その '3' から文字数を計算するにはどうすればよいですか?」

答え: 24 (いくつかの合理的な仮定に基づく)

なんで?

まず、「3」は、列が最大 1000 分の 1 秒を格納していることを意味します。

第二に、文字数は日時のフォーマット方法に依存するという@CamWの回答に完全に同意します。したがって、彼が指摘したように、提供した情報から文字数を実際に計算することはできません。

しかし、第三に、もう少し先に進みましょう。datetime 列の値にISO 8601形式を使用することは妥当と思われます。したがって、より完全な答えのために、次のように仮定します。

  • すべての日付が 1000 年から 9999 年の間にあり、
  • (独自のような特定のタイムゾーンではなく)日時をUTCで表示します。
  • Javascript の Date.prototype で使用される区切り文字を使用します。toISOString () メソッド。

これらの仮定では、列の値を表現するための文字数は 24 になります。

理由を確認するために、質問をした日時をその形式に入れましょう。

2013-07-25T07:28:06.000Z    // when you asked your question

123456789012345678901234    // ruler (number of characters)
         1         2        // 

YYYY-MM-DDTHH:mm:ss.sssZ    // representation with specifiers

偶然かもしれませんが、あなたの例の「3」は、標準の Javascript ISO 8601 日付表現の精度 (1000 分の 1 秒まで) と一致します。日付の精度が「4」の場合、使用可能な精度を 1 万分の 1 秒まで表示する同様の表現は、25 文字の長さになります。"5" = 26 など。

于 2016-06-04T19:07:28.053 に答える
0

リンクを見ると、データ型をクリックできます。それが文字列などの場合は、最大長がわかります。データ型のサイズ

例: DateTime: 文字の長さ 最小 19 桁から最大 23 桁

于 2013-07-25T07:33:50.187 に答える