web-dev-qa-db-ja.com

SELECT $(ドル記号)

SQL Serverの経験は豊富ですが、突然この奇妙なSELECTコマンドを発見しました

SELECT $ 

または

SELECT $ FROM tableName

常にゼロのスカラー値(0.00)を返すか、すべての値が0.00である新しい列を返します

それは何ですか?

27
Hussein Fawzy

SQL Serverが$符号、自動的にmoneyデータ型に変換します。ドル記号の後に明示的な値がないため、SQL Serverは0.00[〜#〜] msdn [〜#〜] から:

moneyまたはsmallmoneyに変換する場合、整数は通貨単位と見なされます。たとえば、整数値4は、4ドルに相当する金額に変換されます(デフォルト言語であるus_englishの場合)。浮動小数点値の小数部の右側の数値は、金額の値については小数点以下4桁に丸められます。整数データ型に変換されるデータ型charまたはvarcharの式は、数字とオプションのプラス記号またはマイナス記号(+または-)のみで構成する必要があります。先行ブランクは無視されます。データ型charまたはvarcharを金に変換した式には、オプションの小数点と先頭のドル記号($)を含めることもできます。

24
Icemanind

少しいじってみると、どの通貨記号が使用されていてもこれが起こるため、SQLサーバーはフィールドが通貨フィールドであることを暗示しています。

通貨記号の後に数字を追加する場合、この場合はドルです。

SELECT $4

SQLサーバーは4.00を返します

そのため、SQL Serverは$を使用しており、[〜#〜] money [〜#〜]データ型のフィールドを作成し、通貨の後に値を入力していないと想定しています私の意見では、これはNULLを返すはずですが、SQL Serverは値が0であると想定しています。

12
Alec.

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)       
2
Bacon Bits