2015-05-20 12 views
6

In this answer, c'è un trucco che permette di utilizzare la funzione di finestra ROW_NUMBER() con una 'costante' nella clausola ORDER BY:T-SQL dollaro nelle espressioni

SELECT ROW_NUMBER() OVER (ORDER BY $/0) 
FROM master..spt_values 

Dopo un po 'di ricerca in Google, posso trovare cosa significa segno di dollaro in questo contesto?

Ho provato ad eseguire una semplice query:

SELECT $; 

e restituisce 0.

Qualcuno potrebbe spiegarlo?

+0

mi aspetterei $/0 per gettare l'eccezione devide per 0 ma funziona. Non userei questo hack. –

+0

@GiorgiNakeuri, sono rimasto sorpreso che funzioni anche questo e proprio perché ho iniziato a scavare in questo trucco. E non mi piace per la stessa ragione, ma per ora non conosco un'altra alternativa. –

+1

L'alternativa è standard fittizio selezionare 'SELECT ROW_NUMBER() OVER (ORDER BY (SELEZIONA NULL))' –

risposta

5

È solo un money constant (ciò che T-SQL chiama letterali).

Probabilmente sarebbe stato meno sorpreso se avessi visto l'espressione $2.50, che sarebbe stata solo un'altra costante.

Alcuni altri esempi: select £,¢,¤,¥,€ anche tutti gli 0 di ritorno.


Può essere complicato determinare quale tipo di dati stai guardando in T-SQL. Un trucco, se si sospetta si sa che tipo è è quello di scegliere un incompatible type e tentare la conversione:

select CONVERT(date,$) 

Risultato:

Msg 529, Level 16, State 2, Line 1 
Explicit conversion from data type money to date is not allowed. 
+6

'SELECT SQL_VARIANT_PROPERTY ($, 'BaseType')' sarebbe meglio. –

+0

Non ne avevo idea. Ecco la migliore lista completa che ho finora per chiunque ne abbia bisogno, usando http://www.xe.com/symbols.php e SSMS. seleziona $, £, ¢, ¤, ¥, €, ₡, ₱, ﷼, ₩, ₮, ₨, ₫, ฿, ៛, ₪, ₭, ₦; –

+0

e la lista continua a crescere per me, http://www.fileformat.info/info/unicode/category/Sc/list.htm. selezionare $, £, ¢, ¤, ¥, €, ₡, ₱, ﷼, ₩, ₮, ₨, ₫, ฿, ៛, ₪, ₭, ₦, ৲, ৳, $, ₠, ₢, ₣, ₤, ₥, ₧, ₪, ₯, ₰, $, ¢, £, ¥, ₩; –

2

Grazie alla @Damien_The_Unbeliever per punta alla giusta direzione.

vorrei solo aggiungere ai suoi risultati di risposta di una query che dà una descrizione precisa quali sono costanti con il segno $:

SELECT 
    $ AS Value, 
    SQL_VARIANT_PROPERTY ($ , 'BaseType') AS BaseType, 
    SQL_VARIANT_PROPERTY ($ , 'Precision') AS Precision, 
    SQL_VARIANT_PROPERTY ($ , 'Scale') AS Scale, 
    SQL_VARIANT_PROPERTY ($ , 'TotalBytes') AS TotalBytes, 
    SQL_VARIANT_PROPERTY ($ , 'MaxLength') AS MaxLength 
    UNION ALL 
    SELECT 
    $2.50, 
    SQL_VARIANT_PROPERTY ($2.50 , 'BaseType'), 
    SQL_VARIANT_PROPERTY ($2.50 , 'Precision'), 
    SQL_VARIANT_PROPERTY ($2.50 , 'Scale'), 
    SQL_VARIANT_PROPERTY ($2.50 , 'TotalBytes'), 
    SQL_VARIANT_PROPERTY ($2.50 , 'MaxLength') 

Risultati:

Value BaseType Precision Scale TotalBytes MaxLength 
0.00 money  19   4  10   8 
2.50 money  19   4  10   8 
Problemi correlati