2015-05-17 31 views
6

buldum gibi (SQL Server kitaplarda):

\ (Backslash) (Transact-SQL)
okunabilmesi için iki veya daha fazla hat sabit uzun bir dize ayırır.

ve

SELECT Clause (Transact-SQL) ... $IDENTITY | $ROWGUID
Ve
$PARTITION (Transact-SQL)
bölümleme sütun değerler kümesi herhangi belirtilen bölüm fonksiyonu için eşleştirilir içine bölme numarasını döndürür .

\ kullanım

ve özel T-SQL SQL Server $.

Şimdi, böyle bir sorgu var: Ben bu karakterler hakkında bulamıyorum şey olduğunu düşünüyorum

a | b | c  | d 
-----+------+-------+------- 
0.00 | 0.00 | 11.00 | 12.00 

: Böyle geçerli bir sonuç var

SELECT \ a, $ b, \11 c, $12 d; 

.

Düzenleme:
Bir numara currency symbols sonra gelirse, SQL Server tanımlanan sembolü çıkarmak ve para veri türü olarak değerini saklar bulundu:

Ve SQL Server, tek tercüme düşünüyorum para -bu kısım + ve - arasındadır bir kısmında son deyimdir sembol - formülünün 0.00 ve sadece -$, ($), (12 + $), ($) + 12, $ * (12 - $) veya benzeri gibi parçanın sonunda değil, $ + 1, 2 * $ - 1. Ayrıca, $ 2'un $2 ile aynı olduğunu buldum.

Yukarıdaki davranış, \ için aynıdır; bu, SQL Server'ın \ para birimi sembolü olduğunu düşündüğü anlamına gelir !!!

+0

ters eğik çizgi belgelenmiş davranış geçerli değildir bu yüzden burada sürekli bir dize bir parçası değildir. T-SQL ayrıştırıcısı katı değildir, bu nedenle bazen hatalı biçimlendirilmiş değişmezlere ve ifadelere yorumlanabilir. Elbette, bu tür belgelenmemiş davranışlara güvenmek, davranış her an değişebileceği ve kodu bozabileceğinden kırılgandır. –

+0

"Bu, SQL Server'ın bir para birimi sembolü olduğunu düşündüğü anlamına gelir!"- ABD-ASCII uyumlu Japon kodlamalarının tarihsel olarak yaygın olarak kullanılmasının, YK sembolünü, US-ASCII'de ters eğik çizgi olacak şekilde kodun üzerine yerleştirdiği gerçeğiyle ilgili olabilir. Yine de, ters eğik çizgi oluşturan bazı yazı tipleri var. Bir Yen sembolü – hvd

+2

Bu, OP için bir başlangıç ​​noktası veya soruyu cevaplamak isteyen her kişi olabilir: http://www.sqlservercentral.com/blogs/philfactor/2010/07/29/the-killer-backslach-in -tsql/ –

cevap

7

Veri türünü kontrol etmeyi düşündüm ve her birinin veri türü parasını döndürdüğünü görürsünüz.

WITH CTE 
AS 
(
    SELECT \ a, $ b, \11 c, $12 d 
) 

SELECT SQL_VARIANT_PROPERTY(a,'baseType') a, 
     SQL_VARIANT_PROPERTY(b,'baseType') b, 
     SQL_VARIANT_PROPERTY(c,'baseType') c, 
     SQL_VARIANT_PROPERTY(d,'baseType') d 
FROM CTE 

Sonuçlar:

a        b        c        d 
------------------------------ ------------------------------ ------------------------------ ------------------------------ 
money       money       money       money 
İlgili konular