20桁を超える長さで、最大長が定義されていない数値を格納したい。
入力して見つけた最大値を保持するデータ型を検索します。varchar(max)
次のようなものが欲しいのですnumeric(max)
が、そこにはありません。
何を使用すればよいですか。使用しても問題ありませんvarchar(max)
が、番号を検証するにはどうすればよいですか。
20桁を超える長さで、最大長が定義されていない数値を格納したい。
入力して見つけた最大値を保持するデータ型を検索します。varchar(max)
次のようなものが欲しいのですnumeric(max)
が、そこにはありません。
何を使用すればよいですか。使用しても問題ありませんvarchar(max)
が、番号を検証するにはどうすればよいですか。
bigint
範囲は-2^63(-9,223,372,036,854,775,808)から2 ^ 63-1(9,223,372,036,854,775,807)なので、ニーズに合う場合があります。
SQL Serverにはこれ以上の整数型はないため、文字ベースのフィールド(テキストフィールドへの数値データの格納に関連するすべての変換と並べ替えの問題)を解決する必要がある場合があります。
これによると、
データ型「float」は明らかに最大の数値サポートを持ち、309(!!!)桁の数値をサポートします。
それはあなたの数が整数であるか、実数であるか、負の可能性があるかによって異なります。
varchar(max)
番号を保存するためにを使用することを計画している場合は、本当に深く考えてください。データベース内の列のタイプは、(私にとって)データの一貫性を確保するための最も重要なポイントです。それでそれは可能ですが、それは本当に必要ですか?
使用しても問題あり
varchar(max)
ませんが、番号を検証するにはどうすればよいですか?
チェック制約を使用できます。
CREATE TABLE Numbers (
n varchar(max) not null,
constraint CK_Numeric CHECK (n not like '%[^0-9]%')
)
チェック制約は、n
列内の文字が0から9の範囲外にないことを確認することです。これは二重否定ですが、状態を表現する最も簡単な方法です。値に小数を含めることができる場合は、より複雑なチェックが必要になる場合があります。
CREATE TABLE Decimals (
d varchar(max) not null,
constraint CK_Numeric CHECK (
d not like '%[^0-9.]%' AND
LEN(d) - LEN(REPLACE(d,'.','')) in (0,1))
)
これは.
現在許可されていることを意味し、LEN
チェックは文字列に0回または1回しか表示されないことを確認しています。