2015-05-17 15 views
6

Như tôi đã tìm thấy (trong sách SQL Server):

\ (Backslash) (Transact-SQL)
Breaks một chuỗi dài liên tục thành hai hoặc nhiều dòng cho dễ đọc.

SELECT Clause (Transact-SQL) ... $IDENTITY | $ROWGUID

$PARTITION (Transact-SQL)
Trả về số phân vùng vào đó một tập hợp các giá trị cột phân vùng sẽ được ánh xạ đối với bất kỳ chức năng phân vùng định .

việc sử dụng \$ trong T-SQL đặc biệt Máy chủ SQL.

Bây giờ, tôi có một câu hỏi như thế này:

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

Đó có một kết quả có giá trị như thế này:

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

Tôi nghĩ có cái gì đó mà tôi không thể tìm thấy nó về nhân vật này .

Edit:
Tôi thấy rằng nếu một số được đưa ra sau currency symbols, SQL Server sẽ loại bỏ các biểu tượng được xác định và lưu trữ các giá trị như một kiểu dữ liệu tiền:

Và tôi nghĩ, SQL Server dịch một đơn ký hiệu tiền tệ đó là cụm từ cuối cùng trong một phần -these phần là giữa +- - công thức để 0.00 và chỉ ở phần cuối của phần như -$, ($), (12 + $), ($) + 12, $ * (12 - $) hay như vậy, và không $ + 1, 2 * $ - 1. Tôi cũng tìm thấy $ 2 giống như $2.

Mọi hành vi trên đều giống nhau đối với \ nghĩa là SQL Server cho rằng \ là ký hiệu tiền tệ !!!

+0

Các dấu chéo ngược không phải là một phần của một chuỗi liên tục ở đây để các hành vi tài liệu không áp dụng. Bộ phân tích cú pháp T-SQL không nghiêm ngặt nên đôi khi nó cho phép diễn giải các câu và các câu lệnh không đúng định dạng. Tất nhiên, dựa vào hành vi không có giấy tờ như vậy là mong manh vì hành vi có thể thay đổi bất cứ lúc nào và phá vỡ mã. –

+0

"có nghĩa là SQL Server nghĩ' \ 'là biểu tượng tiền tệ !!!"- Có thể liên quan đến thực tế rằng các mã hóa Nhật Bản tương thích với phần lớn mã US-ASCII được sử dụng rộng rãi đã đặt ký hiệu Yên vào điểm mã sẽ là dấu gạch chéo ngược ở US-ASCII. Vẫn còn một số phông chữ hiển thị dấu gạch chéo ngược – hvd

+2

Đây có thể là điểm khởi đầu cho OP hoặc bất kỳ ai sẵn lòng trả lời câu hỏi: http://www.sqlservercentral.com/blogs/philfactor/2010/07/29/the-killer-backslach-in -tsql/ –

Trả lời

7

Tôi nghĩ rằng để kiểm tra datatype và mỗi khi bạn sẽ nhận thấy mỗi trả về tiền datatype.

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 

Kết quả:

a        b        c        d 
------------------------------ ------------------------------ ------------------------------ ------------------------------ 
money       money       money       money 
Các vấn đề liên quan