2015-05-20 11 views
6

Trong this answer, có một thủ thuật cho phép sử dụng ROW_NUMBER() chức năng cửa sổ với một 'liên tục' trong ORDER BY khoản:T-SQL Dollar Đăng nhập Expressions

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

Sau khi một số tìm kiếm trong Google, tôi có thể 't tìm thấy ký hiệu đô la nghĩa là gì trong ngữ cảnh này?

Tôi đã cố gắng để thực hiện một truy vấn đơn giản:

SELECT $; 

Và nó trả 0.

Ai đó có thể giải thích điều này?

+0

Tôi mong chờ $/0 để ném ngoại lệ bằng 0 nhưng nó hoạt động. Tôi sẽ không sử dụng hack này. –

+0

@GiorgiNakeuri, tôi đã rất ngạc nhiên khi nó hoạt động quá và đó là chính xác bởi vì tôi đã bắt đầu đào sâu vào thủ thuật này. Và tôi không thích nó bởi cùng một lý do, nhưng tôi không biết một lựa chọn khác cho bây giờ. –

+1

Cách khác là giả standart chọn 'SELECT ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) ' –

Trả lời

5

Nó chỉ là một money constant (những gì T-SQL gọi là chữ).

Bạn có lẽ sẽ ít ngạc nhiên hơn nếu bạn thấy biểu thức $2.50, đây sẽ là một hằng số khác.

Một số ví dụ khác: select £,¢,¤,¥,€ cũng trả về tất cả 0.


Có thể khó để xác định loại dữ liệu bạn đang xem trong T-SQL. Một mẹo nhỏ, nếu bạn nghi ngờ bạn biết những gì loại đó là là để chọn một incompatible type và cố gắng chuyển đổi:

select CONVERT(date,$) 

Kết quả:

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')' sẽ tốt hơn. –

+0

Tôi không biết. Dưới đây là danh sách đầy đủ nhất tôi có cho đến nay cho bất cứ ai cần nó, bằng cách sử dụng http://www.xe.com/symbols.php và SSMS. chọn $, £, ¢, ¤, ¥, €, ₡, ₱, ﷼, ₩, ₮, ₨, ₫, ฿, ៛, ₪, ₭, ₦; –

+0

và danh sách tiếp tục phát triển cho tôi, http://www.fileformat.info/info/unicode/category/Sc/list.htm. chọn $, £, ¢, ¤, ¥, €, ₡, ₱, ﷼, ₩, ₮, ₨, ₫, ฿, ៛, ₪, ₭, ₦, ৲, ৳, ﹩, ₠, ₢, ₣, ₤, ₥, ₧, ₪, ₯, ₰, $, ¢, £, ¥, ₩; –

2

Nhờ @Damien_The_Unbeliever cho trỏ đến các đúng hướng.

Tôi chỉ muốn thêm vào kết quả câu trả lời của ông về một truy vấn mà đưa ra một mô tả chính xác là những gì hằng với $ dấu:

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') 

Kết quả:

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