SQL Serverの経験は豊富ですが、突然この奇妙なSELECT
コマンドを発見しました
SELECT $
または
SELECT $ FROM tableName
常にゼロのスカラー値(0.00
)を返すか、すべての値が0.00
である新しい列を返します
それは何ですか?
SQL Serverが$
符号、自動的にmoney
データ型に変換します。ドル記号の後に明示的な値がないため、SQL Serverは0.00
。 [〜#〜] msdn [〜#〜] から:
money
またはsmallmoney
に変換する場合、整数は通貨単位と見なされます。たとえば、整数値4は、4ドルに相当する金額に変換されます(デフォルト言語であるus_englishの場合)。浮動小数点値の小数部の右側の数値は、金額の値については小数点以下4桁に丸められます。整数データ型に変換されるデータ型charまたはvarcharの式は、数字とオプションのプラス記号またはマイナス記号(+または-)のみで構成する必要があります。先行ブランクは無視されます。データ型charまたはvarcharを金に変換した式には、オプションの小数点と先頭のドル記号($)を含めることもできます。
少しいじってみると、どの通貨記号が使用されていてもこれが起こるため、SQLサーバーはフィールドが通貨フィールドであることを暗示しています。
通貨記号の後に数字を追加する場合、この場合はドルです。
SELECT $4
SQLサーバーは4.00を返します
そのため、SQL Serverは$を使用しており、[〜#〜] money [〜#〜]データ型のフィールドを作成し、通貨の後に値を入力していないと想定しています私の意見では、これはNULLを返すはずですが、SQL Serverは値が0であると想定しています。
SQL Serverがmoney
型として処理していることを証明できます。
select $ as n into #x
exec tempdb..sp_help '#x'
sp_help
は、(特に)出力されます:
Column_name Type Computed Length Prec Scale Nullable TrimTrailingBlanks FixedLenNullInSource Collation
-------------- ------- ----------- --------- ------- -------- ----------- --------------------- ----------------------- ------------
n money no 8 19 4 no (n/a) (n/a) (null)