2015-05-22 29 views
21

ho una buona esperienza in SQL Server, Ma improvvisamente ho scoperto questo strano comando SELECT

SELECT $ 

o

SELECT $ FROM tableName 

Tutto il tempo restituisce zero valore scalare (0.00), o una nuova colonna con tutti i valori di 0.00

Che cos'è?

risposta

19

Quando SQL Server incontra il tuo segno $, lo converte automaticamente in un tipo di dati money. Poiché non si dispone di un valore esplicito dopo il simbolo del dollaro, SQL Server assume 0.00. Da MSDN:

Durante la conversione in money o smallmoney, interi vengono considerati unità monetarie. Ad esempio, il valore intero di 4 viene convertito nell'equivalente in denaro di 4 dollari (per us_english, la lingua predefinita). I numeri a destra del decimale nei valori a virgola mobile sono arrotondati a quattro cifre decimali per i valori monetari. Le espressioni dei tipi di dati char o varchar che vengono convertiti in un tipo di dati intero devono essere costituiti solo da cifre e un segno più o meno facoltativo (+ o -). Gli spazi vuoti principali vengono ignorati. Le espressioni di tipi di dati char o varchar convertiti in denaro possono anche includere un punto decimale opzionale e il simbolo del dollaro in testa ($).

+0

ringraziamento, che è grande, ma non posso usarlo con tutti i campi per esempio selezionare $ PrezzoUnitario dai prodotti in Northwind restituisce una nuova riga con il nome e tutte le 0.00 anche, sembra inutile se dovrebbe essere usato con numeri espliciti –

11

Dopo un po 'di fare in giro, ho capito da quando questo accade non importa quale simbolo della valuta viene utilizzata, il server SQL è che implica che il campo è un campo di valuta.

Se si aggiungono i numeri dopo il simbolo di valuta, in questo caso un dollaro così:

SELECT $4 

SQL server restituirà 4,00

Quindi SQL Server sta prendendo l'uso di $ e assumendo che vogliamo creare un campo con il tipo di dati MONEY e poiché non è stato immesso un valore dopo il simbolo di valuta, SQL Server presuppone che il valore sia 0, sebbene a mio avviso ciò dovrebbe restituire NULL.

+0

grazie, è grandioso, ma non posso usarlo con nessun campo ad esempio selezionare $ prezzo unitario da Prodotti in northwind restituisce una nuova riga con il nome e anche 0.00, sembra inutile se esso dovrebbe essere usato con numeri espliciti –

+4

@HusseinFawzy SQL è un intero linguaggio di programmazione, non solo per l'interrogazione di tabelle. Ad esempio, questo sarebbe usato per le istruzioni insert, o per 'WHERE unitprice <$ 1'. La sua usabilità all'interno delle colonne selezionate è dovuta al design uniforme della lingua. Il fatto che tu pensi di essere usato con numeri espliciti è inutile implica che pensi che i numeri espliciti siano essi stessi inutili. – Random832

+0

@HusseinFawzy quando hai un campo in una query e lo metti uno spazio dopo di esso e poi del testo, SQL lo definisce come un alias per il campo. Questa è la sintassi SQL di base.Metto 1234 selezionare quantità che farebbe la stessa cosa o se metto la quantità select myfield da Finance farebbe la stessa cosa. Quindi perché penserei che sia stato un risultato inaspettato? – HLGEM

Problemi correlati