タグ付けされた質問 「datatypes」

保存するデータのタイプ(文字列、日付、数値など)を指定します。

2
フラグの配列(ビットマップ/ビット配列)を格納するためのデータ型
テーブルの各レコードにビット配列を保存し、次の操作をサポートする必要があります。 ビットが設定されているかどうかのテスト、およびビットの設定(SQLを使用) ADO 2.8(ADO.NETではない)を使用した値のクエリと設定 インデックス作成(「カバーインデックス」機能を活用するため) この配列に格納されるビットの最大数は固定されていますが、32を超える場合があります。つまり、単純なint列は常に機能するとは限りません。 これまで見てきたことから、私のオプションは次のとおりです。 複数のint列を使用する bigintを使用します(ビット数が64以下である限り機能します) バイナリを使用 ? 最初のオプションは機能しますが、データにアクセスするコードにかなりのリファクタリングが必要です。2番目のオプションは一時的な救済であり、これまでの検索では、ADOがbigintでうまく機能するかどうかはあまりわかりません。binaryの経験がなく、他のオプションを認識していません。 要件を考慮して、どのデータ型を選択しますか?


2
「SELECT POWER(10.0、38.0);」が算術オーバーフローエラーをスローするのはなぜですか?
私は更新しています私のIDENTITYオーバーフローチェックスクリプトをのアカウントにDECIMALしてNUMERIC IDENTITY列。 チェックの一環として、すべてのIDENTITY列のデータ型の範囲のサイズを計算します。それを使用して、その範囲の何パーセントが使い果たされたかを計算します。以下のためにDECIMAL及びNUMERIC その範囲のサイズである2 * 10^p - 2場合pの精度です。 私はテストを持つテーブルの束を作成DECIMALし、NUMERIC IDENTITY列を、次のようにその範囲を計算しようとしました。 SELECT POWER(10.0, precision) FROM sys.columns WHERE is_identity = 1 AND type_is_decimal_or_numeric ; これにより、次のエラーがスローされました。 Msg 8115, Level 16, State 6, Line 1 Arithmetic overflow error converting float to data type numeric. IDENTITYタイプの列DECIMAL(38, 0)(つまり、最大精度)に絞り込んだのでPOWER()、その値で直接計算を試みました。 以下のすべてのクエリ SELECT POWER(10.0, 38.0); SELECT CONVERT(FLOAT, (POWER(10.0, 38.0))); …

2
SQL Server Decimal(9、0)vs INT
顧客の1人がDECIMAL(18,0)、SQL Server 2008R2データベースのデータ型を一部の列に使用しています。列の成長が非常に遅いため、彼は最近、データ型を変更してDECIMAL(5,0)ストレージを回復することを提案しました。 MSDNライブラリによると、DECIMAL(5,0)データ型の記憶領域は、データ型と同様DECIMAL(9,0)に5バイトです。INT1バイト小さくなりますが、格納できる-99,999〜99,999の代わりに-2 ^ 31〜2 ^ 31の範囲ですべてをDECIMAL(5,0)格納できます。DECIMAL5バイト(DECIMAL(9,0))に収まる最大サイズでも、-999,999,999から999,999,999の範囲の整数のみを格納できます(INT4バイトで提供される範囲の半分未満です)。 DECIMALover を使用することの2つの「メリット」を考えることができますINT。 後でストレージ容量を使用せずにスケールを追加する機能 データ型を変更せずに、38桁まで精度をスケーリングする機能 しかし、これらは私の意見では本当の利点ではありません: 整数へのスケールの追加は、ごくわずかな場合にのみ意味があります(スケールが違いを生むほとんどの場合、事前に追加することもできます) SQL Serverは、すべての精度/スケールの組み合わせを異なるデータ型と見なします。そのため、精度またはスケールを増やしても、データ型はそのままではありません。 これは私に疑問を抱かせます:DECIMAL(5,0)整数のデータ型の追加の利点は何ですか?

4
NVARCHAR列の値が実際にUnicodeであるかどうかを検出します
いくつかのSQL Serverデータベースを継承しました。ETLを取得するSQL Server 2014 Standardのソースデータベース(「Q」と呼びます)から約8670万行、41列の幅を持つ1つのテーブル(「G」と呼びます)がありますSQL Server 2008 R2 Standardで同じテーブル名を持つターゲットデータベース(「P」と呼びます)。 すなわち[Q]。[G] ---> [P]。[G] 編集:2017年3月20日:一部の人々は、ソーステーブルがターゲットテーブルの唯一のソースであるかどうかを尋ねました。はい、それが唯一のソースです。ETLに関する限り、実際の変換は行われていません。事実上、ソースデータの1:1コピーであることが意図されています。したがって、このターゲットテーブルに追加のソースを追加する予定はありません。 [Q]。[G]の列の半分強はVARCHAR(ソーステーブル)です。 13列はVARCHAR(80)です 9列はVARCHAR(30)です 2列はVARCHAR(8)です。 同様に、[P]。[G]の同じ列はNVARCHAR(ターゲットテーブル)で、同じ幅の同じ列数を持ちます。(つまり、同じ長さですが、NVARCHAR)。 13列はNVARCHAR(80)です 9列はNVARCHAR(30)です 2列はNVARCHAR(8)です。 これは私の設計ではありません。 ALTER [P]。[G](ターゲット)列のデータ型をNVARCHARからVARCHARに変更したい。安全に(変換によるデータ損失なしで)したいです。 ターゲット表の各NVARCHAR列のデータ値を見て、列に実際にUnicodeデータが含まれているかどうかを確認するにはどうすればよいですか? 各NVARCHAR列の各値を(ループで?)チェックし、値のいずれかが本物のUnicodeであるかどうかを確認できるクエリ(DMV?)は理想的なソリューションですが、他の方法も歓迎します。


2
カスタムデータ型などはありますか?
MySQLはカスタムデータ型をサポートしていますか?たとえば、郵便番号はvarchar(10)フィールドに格納されintますが、空白のオプションと5桁か5 + 4桁の郵便番号かを示すフラグを付けて、に圧縮できます。 そのようなことのためにシームレスなデータ型をインストールする方法はありますか?アプリケーションに関する限り、それは文字列型であり、アプリケーションが無効なデータを渡すと、データの切り捨て(警告の有無にかかわらず)が発生します。 カスタム関数を使用できます(たとえば、INET_ATONIPv4アドレス用の組み込み関数があります。ただし、zip LIKE '12345%'適切にインデックスを作成する必要があるものは許可されません。カスタムデータ型の適切なサポートにより、データ型をマークできます。そのため、コンパクトzip intは、並べ替えられると、まるでのように並べ替えられzip varchar(10)ます。 これにより、列の幅を固定でき、6または10バイトの変数ストレージを固定幅の4バイトに削減できます。 適用可能な用途がいくつかあります 郵便番号 IPv6アドレス 分のレベルの精度と容量を超えるカスタム2038ストレージタイムスタンプフィールドでdatetime、使用量は未満ですが、実装年より前の日付をサポートする必要はありません(システムで最も古い日付の場合、最小は2007になります) DSTを実装するタイムスタンプ(存在しないようです) 2文字の米国の州は1バイトで保存できます longはENUM、カスタムデータ型に分離DESCRIBEできるため、すべてのラッピングで出力がそれほど乱雑になりません。 データ型ハンドラーは、関数が保存される方法と同様に保存されることを期待しています。 データベースエンジンには、このようなリモートで何かがありますか?私は主にMySQLを使用しますが、これを実装したことがあるかどうか、アプリケーションに関数のような関数を呼び出させること以外は興味がありINET_ATONます。 MS SQLにはそのような性質があるように見えますが、単なる同義語以上のものかどうかを知りたいと思います。(例えばbooleanの同義語可能性がありtinyint(1)、またはpostal_codeのいずれかのcharまたはvarchar (5または9または10))シノニムは、私はおよそここに求めていたものではないです。

1
PostgreSQLに1バイト整数を格納する方法は?
PostgreSQLのドキュメントでは、整数データ型は2バイト、4バイト、または8バイトのスペースに格納できると言われています。データベース内のテーブルの列の1つに1バイトの整数値が含まれていて、それを1バイトのデータ型で格納したい。 PostgreSQLで1バイト整数データ型を使用する拡張機能または方法はありますか? NUMERIC(1,0)は何バイトですか?

4
電話番号のデータ型:VARCHAR、INTまたはBIGINT?
ですから、これは今年のダミーの質問になりますが、これを通過するのは初めてではないので、尋ねる必要があります。次のテーブル定義を見てください。 今すぐですが、電話番号が表示される列from_numberを見てくださいVARCHAR(45)。電話が世界中でいくつの番号を持つことができるかわからないので、私はそれらのほとんどすべてをカバーしようとしています。私は私が考えるように、可能な限り、データベースの整合性を維持したいVARCHARあなたは私に言う、多分私は間違っている- -私はへの変更に考えていますので、この種の情報ホールドのための適切なタイプではありませんINT偶数かBIGINT。 Workbenchで列を定義するとき()は、すべての場合ではなく、前に言及したものの中で括弧で囲まれた数を指定する必要があります。だから私がこれを行うと:BIGINT()私はこのエラーを受け取りました: ここで、このMySQLタイプについて少し読んでください。基本的に情報はこれです: 大きな整数。...符号なしの範囲は0〜18446744073709551615です。 それは私に尋ねます:BIGINT()型を定義するときに括弧に設定する値。(私はBIGINTを使用していますが、これはINTが電話が持つことができる数と同じ数を保持できるかどうかわからないためです-おそらく私も間違っています)。MariaDB / MySQLデータベースに列を作成する正しい方法はどれですか? とにかく私はあなたの意見、経験を知りたいです、そして、もちろん、私は答えを得たいです 注: ER図の作成には、MySQL Workbench最新版を使用しています。MariaDB 10.0.xも使用しています

3
128ビット整数のMySQLデータ型
私は128ビットの符号なし整数をMySQLに保存する必要があり、そのような大きな数を保存するのに最適なデータ型は何だろうと思っていました。 現在、私は使用してbinary(16)いますが、それは多くの変換関数を伴いますpack(/huge number in hex .../)。 128ビットの符号なし整数を格納するのに最適なデータ型はありますか?
12 mysql  datatypes 

1
SQL ServerクエリプランXML:QueryPlanHashの長さ
更新:これは間違いなくバグです。詳細については、こちらの接続アイテムをご覧ください。 sp_BlitzCacheへのいくつかの変更(完全な開示、私は作成者の1人)をテストしているときに、コードのバグだと思ったものに遭遇しました。 ある時点で、クエリコストを取得するためにクエリプランハッシュを照合しています。私たちはそのようにしています: statement.value('sum(/p:StmtSimple[xs:hexBinary(substring(@QueryHash, 3)) = xs:hexBinary(sql:column("b.QueryHash"))]/@StatementSubTreeCost)', 'float') これは、私が見た限りではうまくいきました。ただし、奇妙なケースの1つとして、XMLの部分文字列がNULL値をスローし、プランのコストはかなり高いにもかかわらず、コストが0でした。 掘り下げる実行計画(フル開示は、ホストが計画を貼り付けていること、会社のための私の仕事は)、私は、クエリプランハッシュは一つの問題ハッシュのための残りが18ここである例でありながら、17文字の長さだったことに気づきました。 QueryPlanHash = "0x4410B0CA640CDA89" QueryPlanHash = "0x2262FEA4CE645569" QueryPlanHash = "0xED4F225CC0E97E5"-問題! QueryPlanHash = "0xBF878EEE6DB955EA" QueryPlanHash = "0x263B53BC8C14A452" QueryPlanHash = "0x89F5F146CF4B476F" QueryPlanHash = "0xEF47EA40805C8961" QueryPlanHash = "0xB7BE27D6E43677A5" QueryPlanHash = "0x815C54EC43A6A6E9" クエリプランハッシュはaとしてリストされていますBINARY 8-おそらくこれは常に同じ長さでなければなりませんが、私のような人はバイナリ値について何を知っていますか? XQueryを少し試してみたところ、2番目の位置から開始するように部分文字列を変更すると、有効な(正しくないとしても)ハッシュ値が得られることがわかりました。 WITH XMLNAMESPACES('http://schemas.microsoft.com/sqlserver/2004/07/showplan' AS p) SELECT QueryPlanCost = statement.value('sum(/p:StmtSimple/@StatementSubTreeCost)', 'float'), **q.n.value('substring(@QueryPlanHash, …

2
PostgreSQL:関数の引数としてテーブルを渡します
TYPEPostgreSQLで発見しています。私はTABLE TYPEいくつかのテーブルが尊重しなければならないことを持っています(インターフェース)。例えば: CREATE TYPE dataset AS( ChannelId INTEGER ,GranulityIdIn INTEGER ,GranulityId INTEGER ,TimeValue TIMESTAMP ,FloatValue FLOAT ,Status BIGINT ,QualityCodeId INTEGER ,DataArray FLOAT[] ,DataCount BIGINT ,Performance FLOAT ,StepCount INTEGER ,TableRegClass regclass ,Tags TEXT[] ,WeightedMean FLOAT ,MeanData FLOAT ,StdData FLOAT ,MinData FLOAT ,MaxData FLOAT ,MedianData FLOAT ,Percentiles FLOAT[] ); このテンプレートを使用してテーブルを作成できます: CREATE TABLE …

1
CEILINGを使用するとCASE式が誤った値を返す
CASE式が期待どおりの結果を返さないという問題に遭遇しました。 テストとして、10進数の変数を追加して同じCASE式を実行し、期待どおりに結果を返します(IsGun=1ただし、の場合は値を切り上げます。ただし、同じCASE式を別の10進数の値に対して実行すると、常に戻りますCEILING()関数の値であり、元の値を返すことはありません。 SQLコードは次のとおりです。 DECLARE @Num decimal(8,2); set @Num = 12.54; WITH PQ AS ( SELECT UPC, Price1, DBID, AVG(Price1) OVER (PARTITION BY UPC) AS Price1Avg FROM vProducts_PriceQty_Union ) SELECT PQ.UPC, PQ.Price1, PQ.Price1Avg, (CASE WHEN p.IsGun = 1 THEN CEILING(@Num) ELSE @Num END) AS UsingVar, CAST( (CASE WHEN P.IsGun = 1 …

1
型修飾子を使用したデータ型の驚くべき結果
この質問に対する再帰的なCTEソリューションについて説明しながら: 各IDの最後の5つの異なる値を取得する @ypercubeは驚くべき例外に出くわし、型修飾子の処理を調査することになりました。私たちは驚くべき行動を見つけました。 1.型キャストは、一部のコンテキストで型修飾子を保持します しないように指示された場合でも。最も基本的な例: SELECT 'vc8'::varchar(8)::varchar 一つは、期待していないかもしれないvarchar私は、少なくとも、(無修正)でしょう。しかし、結果はvarchar(8)(修飾子付き)です。以下のフィドルで関連する多くのケース。 2.配列の連結により、一部のコンテキストで型修飾子が失われる 必要がないので、これは反対側でエラーになります: SELECT ARRAY['vc8']::varchar(8)[] , ARRAY['vc8']::varchar(8)[] || 'vc8'::varchar(8) 最初の式はvarchar(8)[]期待どおりに生成されます。 しかし、2番目は、連結した後、別のものvarchar(8)がvarchar[]修正されます(修飾子なし)。からの同様の動作、array_append()以下のフィドルの例。 このすべては、ほとんどの状況で重要ではありません。Postgresはデータを失わず、列に割り当てられると、値はとにかく正しい型に強制されます。ただし、反対方向にエラーを発生させると、驚くべき例外が発生します。 3.再帰的なCTEは、完全に一致するデータ型を要求します この単純化されたテーブルを考えると: CREATE TABLE a ( vc8 varchar(8) -- with modifier , vc varchar -- without ); INSERT INTO a VALUES ('a', 'a'), ('bb', 'bb'); このrCTEはvarchar列に対しては機能しvcますが、varchar(8)列に対しては失敗しますvc8。 WITH RECURSIVE cte AS ( …

1
10 ^ 37/1が算術オーバーフローエラーをスローするのはなぜですか?
最近の大きな数字でのプレイの傾向を続けて、私は最近発生したエラーを次のコードに沸騰させました: DECLARE @big_number DECIMAL(38,0) = '1' + REPLICATE(0, 37); PRINT @big_number + 1; PRINT @big_number - 1; PRINT @big_number * 1; PRINT @big_number / 1; このコードの出力は次のとおりです。 10000000000000000000000000000000000001 9999999999999999999999999999999999999 10000000000000000000000000000000000000 Msg 8115, Level 16, State 2, Line 6 Arithmetic overflow error converting expression to data type numeric. 何? 最初の3つの操作は機能するが最後は機能しないのはなぜですか?そして@big_number、出力を明らかに格納できる場合、算術オーバーフローエラーが発生する可能性があり@big_number / 1ますか?

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.